You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

gc.get_referrers返回结果与预期不符的疑问及字典含义咨询

问题解答

那个字典是什么?

这个带__main__键的字典就是当前模块的全局命名空间字典,和你调用globals()得到的对象是同一个。你定义的my_obj、ref_1、ref_2这些变量都存在这个字典里,所以它会作为引用者被返回。

为什么返回数量和sys.getrefcount不一致?

这俩函数统计的维度完全不一样:

  • sys.getrefcount(my_obj)算的是所有引用的总个数,包括:
    • 全局命名空间里my_obj、ref_1、ref_2这3个引用
    • 调用sys.getrefcount时,参数传递生成的临时引用(这就是结果为4的原因)
  • gc.get_referrers(my_obj)统计的是持有该对象引用的容器对象,不是单个变量。比如你那三个变量都存在同一个全局字典里,所以这个字典只会被算一次,不会重复统计。另外,函数调用产生的临时引用属于栈上的临时引用,不在GC的追踪范围内,所以也不会被这个函数返回。

文档说明在哪?

Python官方文档的gc模块部分,对get_referrers的说明明确指出:它返回的是直接引用目标对象的容器对象,不包含栈帧中的临时引用。模块的全局命名空间字典属于GC追踪的容器类型,因此会被列入返回结果。

内容的提问来源于stack exchange,提问作者Kurt Bourbaki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 05:22:03