[Python-Dev] PEP 442: Safe object finalization (original) (raw)

Richard Oudkerk shibturn at gmail.com
Sat May 18 15:56:38 CEST 2013


On 18/05/2013 9:59am, Antoine Pitrou wrote:

This PEP proposes to turn CI disposal into the following sequence (new steps are in bold):

1. Weakrefs to CI objects are cleared, and their callbacks called. At this point, the objects are still safe to use. 2. The finalizers of all CI objects are called.

How do you know that one of the finalizers will not do something which causes another to fail?

Presumably the following would cause an AttributeError to be printed:

 class Node:
     def __init__(self):
         self.next = None
     def __del__(self):
         print(self, self.next)
         del self.next                   # break Node object

 a = Node()
 b = Node()
 a.next = b
 b.next = a
 del a, b
 gc.collect()

Are there are less contrived examples which will cause errors where currently there are none?

-- Richard



More information about the Python-Dev mailing list