这里介绍Python的weak ref弱引用
创建弱引用
Python 中当一个对象没有引用指向自己后,即会被gc回收。但 weak ref弱引用 不会妨碍所指对象被当作垃圾回收
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| import weakref
num1 = {22,44}
num1_weak_ref = weakref.ref(num1)
print(f"num1 -->> {num1}")
print(f"num1_weak_ref() -->> {num1_weak_ref()}")
del num1
print(f"num1_weak_ref() -->> {num1_weak_ref()}")
|
finalize方法
weakref模块的finalize方法在变量所指向的对象上注册一个回调函数,并指定回调函数的实参。该方法会返回一个终结器对象。当对象要被gc回收时,其会自动使用指定实参调用指定的回调函数。此外,可通过终结器对象的alive属性 可判断对象是否存活。由于,终结器对象持有的是对象的弱引用,故不会影响对象被gc回收
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| names1 = {"Tony","Amy"} names2 = names1
ender =weakref.finalize(names1, lambda msg: print("gg:",msg), "Bye~~") print(f"对象是否存活 #1: {ender.alive}")
print("\n---------------after del names1---------------")
del names1 print(f"对象是否存活 #2: {ender.alive}") print(f"names 2 ---->>>> {names2}")
print("\n---------------after del names2---------------")
del names2 print(f"对象是否存活 #3: {ender.alive}")
|
参考文献
- Python编程·第3版:从入门到实践 Eric Matthes著
- Python基础教程·第3版 Magnus Lie Hetland著
- 流畅的Python·第1版 Luciano Ramalho著