The untimely dimise of a weak-reference

Vincent van Beveren V.vanBeveren at rijnhuizen.nl
Fri Jul 30 08:22:33 EDT 2010


Hi everyone,

I was working with weak references in Python, and noticed that it was impossible to create a weak-reference of bound methods. Here is a little python 3.0 program to prove my point:

import weakref

print("Creating object...")
class A(object):
    
    def b(self):
        print("I am still here")
        
a = A()

def d(r):
    print("Aaah! Weakref lost ref") 

print("Creating weak reference")

r = weakref.ref(a.b, d)

print("Oh, wait, its already gone!")
print("Ref == None, cause of untimely demise: %s" % r())
print("Object is still alive: %s" % a)
print("Function is still exists: %s" % a.b)
print("See:")
a.b()

I also tried this in Python 2.5 and 2.6 (with minor modifications to the syntax of course), and it yielded the exact same behavior. Why is this, and is there anything I can do about it? I wish to reference these bound functions, but I do not want to keep them in memory once the object they belong to is no longer referenced.
 
Regards,
Vincent van Beveren

___
Ing. V. van Beveren
Software Engineer, FOM Rijnhuizen
E: V.vanBeveren at rijnhuizen.nl




More information about the Python-list mailing list