What are the differences between _weak_ references and "normal" references?

Erik Max Francis max at alcyone.com
Sat Apr 5 00:43:57 CEST 2003


Jp Calderone wrote:

>   Weak references to objects don't increment the refcount for that
> object.

Right.  And an importang thing to point out from someone with a C++
background is that weak references understand when their referent is
gone, and won't run off into segmentation fault land.  (In C++, you can
delete the referent, but the reference itself will have no idea and will
gladly dereference it.)

>>> import weakref
>>> class C: pass
... 
>>> c = C() # create an object
>>> 
>>> c1 = weakref.ref(c) # and a weak reference to it
>>> c1
<weakref at 0x81593a4; to 'instance' at 0x815a214>
>>> c1() # call the reference to get the referent
<__main__.C instance at 0x815a214>
>>> del c # now the weak reference is dead
>>> c1
<weakref at 81593a4; dead>
>>> c1()
>>> c1() is None # now the referent is None
1

-- 
 Erik Max Francis / max at alcyone.com / http://www.alcyone.com/max/
 __ San Jose, CA, USA / 37 20 N 121 53 W / &tSftDotIotE
/  \ If the sky should fall, hold up your hands.
\__/ (a Spanish proverb)
    The laws list / http://www.alcyone.com/max/physics/laws/
 Laws, rules, principles, effects, paradoxes, etc. in physics.




More information about the Python-list mailing list