import gc
import weakref
import sys
class A:
def __init__(self, value):
self.value = value
def __repr__(self):
return str(self.value)
if __name__ == '__main__':
##############################
# 强引用
##############################
a = A(88)
print(sys.getrefcount(a)) # 2
d = dict()
d['primary'] = a
print(d['primary']) # 88
print(sys.getrefcount(a)) # 3
del a
gc.collect() # 立即进行垃圾回收
print(d['primary']) # 88 依然存在
##############################
# 弱引用
##############################
a = A(88)
print(sys.getrefcount(a)) # 2
d = weakref.WeakValueDictionary()
d['primary'] = a # 这里是弱引用
print(d['primary']) # 88
print(sys.getrefcount(a)) # 2
del a
gc.collect() # 立即进行垃圾回收
print(d['primary']) # 已经不存在,抛出KeyError异常
本系列文章和代码已经作为项目归档到github,仓库地址:jumper2014/PyCodeComplete。大家觉得有帮助就请在github上star一下,你的支持是我更新的动力。什么?你没有github账号?学习Python怎么可以没有github账号呢,快去注册一个啦!