在对某个对象的引用只有弱引用时,GC会回收该对象。
可被弱引用的:实例,函数,方法,set,fronzenset,file,generator,
type object,socket,array,deque,re,code。
list dict可以通过派生后支持弱引用
其他的类型例如 tuple long 不支持,即使被派生
weakref.ref(object[, callback])
返回一个原始对象的弱引用 weakref.ReferenceType
callback会在原始对象被删除时调用
o = Object() # 原始对象
r = weakref.ref(o) # 返回一个弱引用对象,在被调用时返回原始对象
o2 = r() # 此时o o2指向同一个对象
del o, o2
r() # 返回None
o = r()
if o is None:
print "Object has been deallocated; can't frobnicate."
else:
print "Object is still live!"
weakref.proxy(object[, callback])
返回一个原始对象的代理 weakref.ProxyType或weakref.CallableProxyType或weakref.ProxyTypes
使用时可把该代理当作原始对象一样使用
weakref.getweakrefcount(object)
返回一个对象的弱引用数量
weakref.getweakrefs(object)
返回一个对象的所有弱引用
class weakref.WeakKeyDictionary([dict])
iterkeyrefs()
keyrefs()
class weakref.WeakValueDictionary([dict])
itervaluerefs()
valuerefs()
class weakref.WeakSet([elements])
弱引用集合
网友评论