0

後,我跑了 「a.method」,爲什麼sys.getrefcount(一)共有3款?沒有新的變量稱爲對象一些關於sys.getrefcount

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

請學習如何創建一個如何在發佈問題之前創建最小,完整和可驗證的示例(https://stackoverflow.com/help/mcve) – mrid

+0

您正在使用IPython還是其他IDE? –

回答

1

在Python交互式外殼,最後一個命令的結果被存儲在a special varialbe named _。當然,這個變量保存了對該結果的引用。

在你的情況,其結果是一個方法對象,其中包含一個引用到它的「自我」,即變量a。換句話說,在你描述的情況下,額外的參考是間接的。這被保持活着由於可變_結果(<bound method A.method of <__main__.A object at 0x7f1e73059b50>>),保持到<__main__.A object at 0x7f1e73059b50>的參考。

+1

的有趣的事情是,當你調用'sys.getrefcount(一)'_again_,那麼它的原因是什麼這個答案描述返回2('_'是第一個'sys.getrefcount後的整數'3'(一)' )。 – eepp