Barry Scott writes:

I can think of ways to implement evaluation-on-reference, but they all have the effect of making python slower.

Probably.

The simple

a = b

will need to slow down so that the object in b can checked to see if it need evaluating.

No, it doesn't. Binding a name is special in many ways, why not this one too? Or "a = a" could be the idiom for "resolve a deferred now", which would require the check for __evaluate_me_now__ as you say. But such simple "a = b" assignments are not so common that they would be a major slowdown. I would think the real problem would be the "oops" of doing "a = b" and evaluating a deferred you don't want to evaluate. But this isn't a completely new problem, it's similar to a = b = [] and expecting a is not b.

Now consider a = b + 0. b.__add__ will be invoked in the usual way. Only if b is a deferred will evaluation take place.

So I don't really see the rest of Python slowing down much.