0

「a.method」を実行した後、なぜsys.getrefcount(a)が3を返したのですか?新しい変数はなかったオブジェクトをPythonのインタラクティブシェルで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

FAQ(https://stackoverflow.com/help/mcve)を投稿する前に、最小、完全、および検証可能なサンプルを作成する方法を学んでください – mrid

+0

IPythonまたは他のIDEを使用していますか? –

答えて

1

と呼ば、最後のコマンドの結果はa special varialbe named _に格納されています。もちろん、この変数はその結果への参照を保持します。

あなたの場合、結果はメソッドオブジェクトです。メソッドオブジェクトは、 "自己"への参照、つまり変数aを保持します。言い換えれば、あなたが説明する場合、余分な参照は間接的です。変数_によって生き続ける結果(<bound method A.method of <__main__.A object at 0x7f1e73059b50>>)は、<__main__.A object at 0x7f1e73059b50>への参照を保持します。

+1

楽しいことは、あなたが 'sys.getrefcount(a)' _again_を呼び出すと、この回答の説明のために2を返します。 '_'は最初の' sys.getrefcount(a) 'の後の整数です。 )。 – eepp

関連する問題