मैं सीपीथन कचरा कलेक्टर के आंतरिक को समझने की कोशिश कर रहा हूं, खासकर जब विनाशक कहलाता है। अब तक, व्यवहार सहज है, लेकिन निम्न मामला मुझे यात्रा करता है:जब सीपीथन कचरा कलेक्टर अक्षम किया जाता है तो विनाशक क्यों कहा जाता है?
- जीसी को अक्षम करें।
- कोई ऑब्जेक्ट बनाएं, फिर उसके संदर्भ को हटा दें।
- ऑब्जेक्ट नष्ट हो गया है और _____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 पर काम नहीं करता।
क्या यह "दो कचरा कलेक्टर" कार्यान्वयन कहीं भी दस्तावेज है? – Frederik
एलेक्स मार्टेलि के उत्तर, और इसके संबंधित लिंक पर एक नज़र डालें। यह संभवतः किसी और चीज से बेहतर है जिसके साथ मैं आ सकता हूं। –