[Python-Dev] Garbage collecting closures (original) (raw)

Jeremy Hylton jeremy@zope.com
14 Apr 2003 10:52:42 -0400


On Mon, 2003-04-14 at 10:34, Paul Prescod wrote:

I don't know what the solution is, but it seems quite serious to me that there is another special case to remember when reasoning about when destructors get called. Roughly, Python's cleanup model is "things get destroyed when nothing refers to them." Then, that gets clarified to "unless they have reference cycles, in which case they may get destroyed arbitrarily later" and now "or they are used in a function containing another function, which will cause a circular reference involving all local variables."

The details of when finalizers are called is an implementation detail rather than a language property. You should add to your list of worries: An object is not finalized when it is reachable from a cycle of objects involving finalizers. They don't get destroyed at all.

Finalizers seem useful in general, but I would still worry about any specific program that managed critical resources using finalizers.

Jeremy