关于sys.getrefcount的一些事情

时间:2017-09-20 09:59:28

标签: python garbage-collection python-internals reference-counting

在我运行“a.method”后,为什么sys.getrefcount(a)返回3?没有新的变量引用对象

class A(object):
   def method(): pass 

import sys
a=A()

sys.getrefcount(a) # returns 2

a.method
<bound method A.method of <__main__.A object at 0x7f1e73059b50>>

sys.getrefcount(a) # returns 3

1 个答案:

答案 0 :(得分:1)

在python交互式shell中,最后一个命令的结果存储在a special varialbe named _中。当然,这个变量可以引用该结果。

在您的情况下,结果是一个方法对象,它将ref保存为“self”,即变量a。换句话说,在您描述的情况下,额外的ref是间接的。由于变量<bound method A.method of <__main__.A object at 0x7f1e73059b50>>而保持活跃的结果(_)包含对<__main__.A object at 0x7f1e73059b50>的引用。