क्लीनअप ग्लोबल्स को None पर सेट करके होता है। लोकल्स सत्र के अंत में स्वयं नष्ट हो जाते हैं। पायथन द्वारा कॉल किया गया फ़ंक्शन __del__ ग्लोबल्स को None पर सेट करता है।
निम्न कोड पर विचार करें जहां दिए गए क्लास में सभी ऑब्जेक्ट्स का क्लीनअप होता है:
उदाहरण
class Counter:\n Count = 0 # इस क्लास के ऑब्जेक्ट्स की गिनती\n def __init__(self, name):\n self.name = name\n print(name, 'created')\n Counter.Count += 1\n def __del__(self):\n print(self.name, 'deleted')\n Counter.Count -= 1\n if Counter.Count == 0:\n print('Last Counter object deleted')\n else:\n print(Counter.Count, 'Counter objects remaining')\nx = Counter("First")\ndel xअंतिम del के बिना, आपको एक अपवाद मिलता है।
__del__ के संबंध में पायथन डॉक्स से:
चेतावनी: उन अनिश्चित परिस्थितियों के कारण जिनके तहत __del__() मेथड्स को आमंत्रित किया जाता है, उनके निष्पादन के दौरान होने वाले अपवादों को नजरअंदाज कर दिया जाता है, और एक चेतावनी sys.stderr पर प्रिंट की जाती है। साथ ही, जब __del__() को मॉड्यूल हटाए जाने के जवाब में आमंत्रित किया जाता है (उदाहरण के लिए, जब प्रोग्राम का निष्पादन पूरा हो जाता है), तो __del__() मेथड द्वारा संदर्भित अन्य ग्लोबल्स पहले ही हटाए जा चुके हो सकते हैं। इस कारण से, __del__() मेथड्स को बाहरी इनवेरिएंट्स को बनाए रखने के लिए आवश्यक न्यूनतम कार्य करना चाहिए।
स्पष्ट del कॉल के बिना, __del__ केवल प्रोग्राम के अंत में कहा जाता है, Counter और/या Count पहले ही GC-ed हो चुके हो सकते हैं जब तक __del__ कहा जाता है (ऑब्जेक्ट्स के कलेक्ट होने का क्रम नियतात्मक नहीं है)। अपवाद का मतलब है कि Counter पहले ही कलेक्ट हो चुका है। आप __del__ के साथ कुछ विशेष रूप से फैंसी नहीं कर सकते।
यहां दो संभावित समाधान हैं।
एक स्पष्ट फाइनलाइज़र मेथड का उपयोग करें, जैसे फ़ाइल ऑब्जेक्ट्स के लिए close()।
कमजोर संदर्भों (weak references) का उपयोग करें।