# -*- coding:UTF-8 -*-
import weakref
class ExpensiveObject(object):
def __del__(self):
print'(Deleting%s)' % self
def callback(reference): #回调函数
print 'callback(', reference, ')'
obj = ExpensiveObject()
r = weakref.ref(obj, callback) #当弱引用被删除会调用回调函数
#ref=weakref.proxy(obj)
print 'obj:',obj
print 'ref:',r
print 'r():', r()
print 'deleting obj'
del obj
print 'r():', r()
------------------------------------------------------
obj: <__main__.ExpensiveObject object at 0x02499070>
ref: <weakref at 0248BF30; to 'ExpensiveObject' at 02499070>
r(): <__main__.ExpensiveObject object at 0x02499070>
deleting obj
callback( <weakref at 0248BF30; dead> )
(Deleting <__main__.ExpensiveObject object at 0x02499070>)
r(): None