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
相关产品推荐
相关产品推荐

