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

Python引用计数疑问:函数传参后sys.getrefcount返回4的原因

Python引用计数疑问解答

你统计的三个引用来源是正确的:

  • 全局作用域下的变量l
  • print_ref_count函数的形参l持有的引用
  • sys.getrefcount方法被调用时,参数传递带来的临时引用

第四个引用来自CPython解释器内部的求值栈临时引用:执行sys.getrefcount(l)时,解释器需要先把局部变量l对应的对象引用加载到求值栈中,为后续的参数传递做准备,这个加载操作会让引用计数额外加1,最终返回结果就是4。

至于sys.getrefcount(l[0])返回2没有额外计数的原因也很简单:l[0]是从列表中读取的临时值,求值栈上的临时引用和sys.getrefcount的参数引用是同一次计数,不会重复累加。

最后需要注意:引用计数是CPython的特有实现细节,不属于Python语言的通用规范,不同解释器、不同CPython版本甚至不同的运行环境,都可能得到不一样的计数结果,不需要将其作为绝对固定的标准。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:36:03