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