On 04/26/2013 06:50 PM, Ian Kelly wrote:
On Fri, Apr 26, 2013 at 10:54 AM, Chris Angelico <ros...@gmail.com> wrote:
Once it's been proven that there's an unreferenced cycle, why not
simply dispose of one of the objects, and replace all references to it
(probably only one - preferably pick an object with the fewest
references) with a special temporary object? In fact, that could
probably be done in CPython by wiping out the object in memory and
replacing it with a special marker of some sort, which would then
automatically "take over" all references to the old object. Any
attempt to manipulate this object could simply pop back with a
DestructedObject exception or something.

I think it still boils down to the same problem -- how should Python
*predictably* choose which object will be disposed of in order to
break the cycle?  I don't see that this question is any different than
asking how should Python choose which __del__ method should be called
first, since the object so disposed of would still need its __del__
method called.


Perhaps if the __del__ methods disposed of the non-cyclic parts first, an exception doing the cyclic cleanups wouldn't hurt. Picture a doubly-linked list of file-type objects. Each one could release its file before trying to do anything with the links.

--
DaveA
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to