私が理解しているように、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])」オブジェクトはまだ存在しますか(ガベージコレクションはありません)?
私が理解しているように、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])」オブジェクトはまだ存在しますか(ガベージコレクションはありません)?
を呼び出すgetrefcount()
と、参照が値によって関数の引数にコピーされ、オブジェクトの参照カウントが一時的に増加します。これは、2番目の参照が由来するところです。
これはドキュメントで説明されています:
返されるカウントは、(一時的な)参照が引数として含まれているため、通常、予想よりも1つ多くなります。
getrefcount().
2番目の質問について:
「dela」を実行した場合、「numpy.array([1.2,3.4])」オブジェクトは引き続き存在しますか(ガベージコレクションはありません)?
終了するまでgetrefcount()
に、配列の参照カウントは1に戻り、それ以降del a
はメモリを解放します。