Tôi đang cố gắng hiểu nội bộ của bộ thu gom CPython, đặc biệt khi trình phá hủy được gọi. Cho đến nay, hành vi này là trực quan, nhưng trường hợp sau đây cho tôi biết:Tại sao bộ hủy được gọi khi bộ thu gom CPython bị tắt?
- Tắt GC.
- Tạo đối tượng, sau đó xóa tham chiếu đến đối tượng đó.
- Đối tượng bị hủy và phương thức _____del_____ được gọi.
Tôi nghĩ điều này sẽ chỉ xảy ra nếu bộ thu gom rác được bật. Ai đó có thể giải thích tại sao điều này xảy ra? Có cách nào trì hoãn việc gọi điện cho destructor không?
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()
Disclaimer: mã này không có nghĩa là phục vụ sản xuất - Tôi đã lưu ý rằng đây là rất thực hiện cụ thể và không hoạt động trên Jython.
Đây có phải là "hai người thu gom rác thải" được thực hiện ở đâu đó không? – Frederik
Hãy xem câu trả lời của Alex Martelli và các liên kết liên quan của Alex Martelli. Nó có lẽ tốt hơn bất cứ thứ gì khác tôi có thể nghĩ ra. –