From what I understand, Python 3 does not make any guarantees about when the memory for an object is released except that it is not released as long as at least one non-weak reference points to an object.
Does the language make any other guarantees about the weak references? In particular, suppose I create a weakref wr
pointing to some object. Suppose by some later time, all non-weak references to that object have been destroyed. Is it guaranteed that at that time wr
would evaluate to None, or might it still evaluate to the original object for a while?
Apart from the language guarantees, is there any interesting implementation behavior around weakref?