On 27/02/2019 21:39, Roel Schroeven wrote:
Rhodri James schreef op 27/02/2019 om 15:18:
Aren't we overthinking this?

I think it's pretty clear that a variable is never deleted before it goes out of scope. A quick search in the documentation points me to (https://docs.python.org/3/reference/datamodel.html#objects-values-and-types):

"Objects are never explicitly destroyed; however, when they become unreachable they may be garbage-collected. An implementation is allowed to postpone garbage collection or omit it altogether — it is a matter of implementation quality how garbage collection is implemented, *as long as no objects are collected that are still reachable*." (emphasis mine)

In the original example (without del), f is reachable everywhere in the function after the initial binding, so it can not be deleted.

Comparisons with C on this point don't seem very relevant: C doesn't have destructors or garbage collection. I don't even see what the C equivalent for "del f" could be. You could perhaps compare with C++, where destructors are also not called before the object goes out of scope (a difference is that in C++ the destructor explicitly always is called at that moment).

I think you're making the mistake of equating names ("variables") and objects here. It is not clear to me that a name can't be removed from the dictionary of locals before it goes out of scope, so long as it doesn't get referred to again, just like C optimisers can note that a local doesn't get used again and reclaim the storage. At that point the object can become unreachable, and will in Marko's example.

The equivalent to "del f" that you can't imagine is the optimiser at work.

--
Rhodri James *-* Kynesim Ltd
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to