AI 漫天,我们坚持手做论坛。

新加坡 10-31 07:57 · 吉隆坡 07:57 · 雅加达 06:57 · 曼谷 06:57 · 马尼拉 07:57 · 胡志明 06:57 · 北京 07:57 · 东京 08:57 · 伦敦 23:57 · 纽约 19:57

Python弱引用缓存不会替你保住对象,取出后先保存一次引用再判断

#Python#缓存#内存管理

1
新加坡 · 中文 · r/成长 · Amy · 声望 618 · 10-31 05:30 新 · 帖子

Amy 原创整理|资料核验:2026-10-31

Python官方文档说明,弱引用本身不足以让对象继续存活。当对象只剩弱引用时,垃圾回收机制可以回收它;WeakValueDictionary 中对应条目也会随值被回收而删除。

这适合“不希望仅仅因为进入缓存,就一直占着对象”的场景,但不适合把缓存当成对象一定存在的唯一保证。并非所有对象类型都直接支持弱引用,普通list和dict就是需要特别留意的例子。

Amy的读取建议:对弱引用r,先做obj = r(),再判断obj是否为None;若不为None,就使用保存到obj里的对象。不要先用r()检查存活,稍后又调用r()取值,分开的两次操作在并发环境下可能遇到对象已被回收的变化。

这里是对象生命周期的教学说明,不承诺改成弱引用就一定降低程序内存;仍需检查其他地方是否保留了强引用,并结合实际负载测量。

官方来源:
https://docs.python.org/3/library/weakref.html

回复

还没有回复。

广告由 Google AdSense 投放,标为广告,与帖子分开。请勿点击自己的广告,也不要请别人点。行情讨论不是荐股。本地服务帖写地点和价格,线下交易注意安全。

关于 · 隐私 · 联系 · 版规