在我运行“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
答案 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>
的引用。