21

私が理解しているように、sys.getrefcount()はオブジェクトの参照の数を返します。これは、次の場合は1である必要があります。

import sys,numpy
a = numpy.array([1.2,3.4])
print sys.getrefcount(a)

しかし、それは2であることが判明しました!だから、私が:

del a

「numpy.array([1.2,3.4])」オブジェクトはまだ存在しますか(ガベージコレクションはありません)?

4

1 に答える 1

33

を呼び出すgetrefcount()と、参照が値によって関数の引数にコピーされ、オブジェクトの参照カウントが一時的に増加します。これは、2番目の参照が由来するところです。

これはドキュメントで説明されています:

返されるカウントは、(一時的な)参照が引数として含まれているため、通常、予想よりも1つ多くなります。 getrefcount().

2番目の質問について:

「dela」を実行した場合、「numpy.array([1.2,3.4])」オブジェクトは引き続き存在しますか(ガベージコレクションはありません)?

終了するまでgetrefcount()に、配列の参照カウントは1に戻り、それ以降del aはメモリを解放します。

于 2012-04-24T16:37:18.770 に答える