Python中的弱引用
Python的垃圾回收由引用计数、标记清理和分代回收等方式构成。
其中大部分对象的生命周期都可以通过对象的引用计数来管理。
查看对象引用计数的方式:
引用计数存在着非常明显的缺陷:即无法处理循环引用的问题。例如:
b,c虽然进行了删除,但是引用计数此时还是1,这两个内存没有被释放,造成内存泄露。
为避免该问题,使用弱引用,弱引用不会增加引用计数。
弱引用的函数定义
weakref.ref(object[,callback])
#callback 可选的回调函数,在引用对象被删除时调用
使用
ref().hello()
#弱引用本质是一个对象,所以在引用指向对象的时候,要用()
另外,弱引用还定义finalize。即对象被删除时的清理函数。
finalize(obj,func,*args,**kwargs)
#func 清理函数
#*args,**kwargs 被传递给清理函数的参数
弱引用还可以指向实例对象的方法,
ref=weakref.WeakMetond(a.hello)
ref()()
'django'