【python笔记】弱引用weakref
参考书籍:
《深度学习入门——自制框架》[日]斋藤康毅 步骤17.4 weakref模块
强引用会出现循环引用的情况
class obj():
pass
a = obj() # 使用赋值运算,引用计数加1
b = obj()
c = obj()
# 执行到这里,a、b、c的引用计数都为1
a.b = b # 被对象强引用,引用计数加1
b.c = c
c.a = a
# 执行到这里,a、b、c的引用计数都为2
这样a、b、c三个对象的引用计数都为2,即使执行a = b = c = None
,引用计数仍然为1,a、b、c都不会被释放(计数为0时,python会自动释放内存空间)
import weakref
import numpy as np
a = np.array([1, 2, 3])
b = weakref.ref(a)
print(f"b:{b}")
print(f"a:{a}")
print("使用b()可以访问b引用的对象")
print(f"b() = {b()}")
a = None
print("====== 运行 a = None 后 ======")
print(f"b:{b}")
可以发现运行a = None
之后,b引用的对象变成dead
了,表明引用的对象已经被删除。
此时再运行print(b())
,输出会变成None
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」