关于 sys.getrefcount
Something about the sys.getrefcount
在我 运行 "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
在python交互shell中,最后一个命令的结果存储在a special varialbe named _
中。自然地,这个变量包含对该结果的引用。
在您的例子中,结果是一个方法对象,它持有对其 "self" 的引用,即变量 a
。换句话说,在您描述的情况下,额外的引用是间接的。由于变量 _
而保持活动状态的结果 (<bound method A.method of <__main__.A object at 0x7f1e73059b50>>
) 持有对 <__main__.A object at 0x7f1e73059b50>
.
的引用
在我 运行 "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
在python交互shell中,最后一个命令的结果存储在a special varialbe named _
中。自然地,这个变量包含对该结果的引用。
在您的例子中,结果是一个方法对象,它持有对其 "self" 的引用,即变量 a
。换句话说,在您描述的情况下,额外的引用是间接的。由于变量 _
而保持活动状态的结果 (<bound method A.method of <__main__.A object at 0x7f1e73059b50>>
) 持有对 <__main__.A object at 0x7f1e73059b50>
.