weakref
weakref
模块允许Python程序员创建对对象的弱引用。
对对象的弱引用不足以使对象保持活动状态:当对引用的唯一剩余引用是弱引用时, 垃圾收集可以自由地销毁引用并将其内存重用于其他内容。但是,在实际销毁对象之前,弱引用可能会返回对象,即使没有对它的强引用也是如此。
弱引用的主要用途是实现保存大对象的高速缓存或映射,其中希望大对象不能仅仅因为它出现在高速缓存或映射中而保持活动。
常用
-
weakref.ref(object [,callback ])
返回对象object的弱引用。如果指示对象仍然存在,则可以通过调用引用对象来检索原始对象; 如果指示对象不再存在,则调用引用对象将返回
None
。如果提供了callback且不返回None
,并且返回的weakref对象仍然存活,则在对象即将销毁时将调用回调; 弱引用对象将作为唯一参数传递给回调; 指示对象将不再可用。>>> import weakerf >>> >>> class A: ... desc = 'weakref test.' ... >>> a = A() >>> r = weakref.ref(a) >>> r <weakref at 0x0000027DF702B958; to 'A' at 0x0000027DF71A8A58> >>> a <__main__.A object at 0x0000027DF71A8A58> >>> r()#使用函数调用方式访问所指对象 <__main__.A object at 0x0000027DF71A8A58> >>> a == r() True >>> r().desc 'weakref test.' >>> del a >>> r()#None >>> r <weakref at 0x0000027DF702B958; dead>
弱引用对象在所指对象销毁时调用回调函数,弱引用对象将作为唯一参数传递给回调
>>> a = A