Python弱引用
要在python中创建弱引用,我们需要使用weakref模块。弱引用不足以使对象保持活动状态。弱引用的基本用法是为大对象实现高速缓存或映射。
要使用此模块,我们应该使用-导入它
import weakref
并非所有对象都可以弱引用。一些内置类型(如元组或整数)不支持弱引用。有一些与弱引用相关的类和方法。
类weakref.ref(object[,callback])
它将返回对该对象的弱引用。当引用对象仍然存在时,可以通过调用引用对象来检索实际对象,但是当不存在实际对象时,它将返回None。
方法weakref.proxy(object[,回调])
此方法用于返回使用弱引用的对象的代理。返回的对象可以是ProxyType或CallableProxyType。
方法weakref.getweakrefcount(对象)
此方法用于返回对象的弱引用和代理的数量。
方法weakref.getweakrefs(对象)
此方法用于返回弱引用和代理对象的列表。
范例程式码
import weakref class my_list(list): pass new_list = my_list('String') #Use my_list class to define a list print(new_list) weak_ref = weakref.ref(new_list) new_weak_list = weak_ref() new_proxy = weakref.proxy(new_list) print(new_weak_list) print('The object using proxy: ' + str(new_proxy)) if new_list is new_weak_list: print("There is a weak reference") print('The Number of Weak references: ' + str(weakref.getweakrefcount(new_list))) del new_list, new_weak_list #Delete both objects print("The weak reference is: " + str(weak_ref()))
输出结果
['S', 't', 'r', 'i', 'n', 'g'] ['S', 't', 'r', 'i', 'n', 'g'] The object using proxy: ['S', 't', 'r', 'i', 'n', 'g'] There is a weak reference The Number of Weak references: 2 The weak reference is: None