Python ガベージ コレクターがどのように機能するか、オブジェクトがいつ収集されるかを制御するためにできることがあるかどうかを理解しようとしています。私はこのテストを書きました:
>>> class Test:
... def __del__(self):
... print 'Delete ' + str(self)
...
>>> def fun():
... return Test()
...
>>> fun()
<__main__.Test instance at 0x0000000002989E48>
>>> fun()
Delete <__main__.Test instance at 0x0000000002989E48>
<__main__.Test instance at 0x00000000023E2488>
>>> fun()
Delete <__main__.Test instance at 0x00000000023E2488>
<__main__.Test instance at 0x0000000002989C48>
ご覧のとおりTest
、インスタンスを保持していませんが、次に を呼び出すまでインスタンスは削除されませんfun
。fun
これは単なる事故ですか (他の時点で削除された可能性があります)、それとも再度電話をかけたときにのみ削除される特定の理由がありますか? 参照を保持しない場合、確実に削除されるようにするためにできることはありますか?