关于 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>.

的引用