特にデストラクタが呼び出されたときのCPythonガベージコレクタの内部を理解しようとしています。これまでのところ、動作は直感的ですが、次の場合は私をつまずかせます。
- GCを無効にします。
- オブジェクトを作成してから、そのオブジェクトへの参照を削除します。
- オブジェクトが破棄され、_____del_____メソッドが呼び出されます。
これは、ガベージコレクターが有効になっている場合にのみ発生すると思いました。誰かがこれが起こる理由を説明できますか?デストラクタの呼び出しを延期する方法はありますか?
import gc
import unittest
_destroyed = False
class MyClass(object):
def __del__(self):
global _destroyed
_destroyed = True
class GarbageCollectionTest(unittest.TestCase):
def testExplicitGarbageCollection(self):
gc.disable()
ref = MyClass()
ref = None
# The next test fails.
# The object is automatically destroyed even with the collector turned off.
self.assertFalse(_destroyed)
gc.collect()
self.assertTrue(_destroyed)
if __name__=='__main__':
unittest.main()
免責事項:このコードは本番用ではありません-これは非常に実装固有であり、Jythonでは機能しないことはすでに説明しました。