पायथन मेमोरी स्पेस को खाली करने के लिए अनावश्यक वस्तुओं (अंतर्निहित प्रकार या क्लास इंस्टेंस) को स्वचालित रूप से हटा देता है। वह प्रक्रिया जिसके द्वारा पायथन समय-समय पर मेमोरी के उन ब्लॉकों को पुनः प्राप्त करता है जो अब उपयोग में नहीं हैं, गारबेज कलेक्शन कहलाते हैं।
पायथन का कचरा संग्रहकर्ता प्रोग्राम निष्पादन के दौरान चलता है और जब किसी ऑब्जेक्ट की संदर्भ संख्या शून्य तक पहुंच जाती है तो ट्रिगर हो जाता है। किसी ऑब्जेक्ट की संदर्भ संख्या में परिवर्तन होने पर उसे इंगित करने वाले उपनामों की संख्या में परिवर्तन होता है।
किसी वस्तु की संदर्भ संख्या तब बढ़ जाती है जब उसे एक नया नाम दिया जाता है या एक कंटेनर (सूची, टपल, या शब्दकोश) में रखा जाता है। ऑब्जेक्ट की संदर्भ संख्या घट जाती है जब इसे डेल से हटा दिया जाता है, इसका संदर्भ पुन:असाइन किया जाता है, या इसका संदर्भ दायरे से बाहर हो जाता है। जब किसी वस्तु की संदर्भ संख्या शून्य तक पहुंच जाती है, तो पायथन उसे स्वचालित रूप से एकत्र करता है।
a = 40 # Create object <40> b = a # Increase ref. count of <40> c = [b] # Increase ref. count of <40> del a # Decrease ref. count of <40> b = 100 # Decrease ref. count of <40> c[0] = -1 # Decrease ref. count of <40>. की गिनती
आप आमतौर पर ध्यान नहीं देंगे जब कचरा संग्रहकर्ता एक अनाथ उदाहरण को नष्ट कर देता है और उसके स्थान को पुनः प्राप्त करता है। लेकिन एक वर्ग विशेष विधि __del__() को लागू कर सकता है, जिसे डिस्ट्रक्टर कहा जाता है, जिसे तब लागू किया जाता है जब इंस्टेंस नष्ट होने वाला होता है। इस पद्धति का उपयोग किसी उदाहरण द्वारा उपयोग किए गए किसी भी गैर-स्मृति संसाधनों को साफ करने के लिए किया जा सकता है।
उदाहरण
यह __del__() विनाशक उस उदाहरण के वर्ग नाम को प्रिंट करता है जो नष्ट होने वाला है -
#!/usr/bin/python class Point: def __init__( self, x=0, y=0): self.x = x self.y = y def __del__(self): class_name = self.__class__.__name__ print class_name, "destroyed" pt1 = Point() pt2 = pt1 pt3 = pt1 print id(pt1), id(pt2), id(pt3) # prints the ids of the obejcts del pt1 del pt2 del pt3
आउटपुट
जब उपरोक्त कोड निष्पादित किया जाता है, तो यह निम्नलिखित परिणाम उत्पन्न करता है -
3083401324 3083401324 3083401324 Point destroyed
नोट - आदर्श रूप से, आपको अपनी कक्षाओं को अलग फ़ाइल में परिभाषित करना चाहिए, फिर आपको उन्हें अपनी मुख्य प्रोग्राम फ़ाइल में आयात विवरण का उपयोग करके आयात करना चाहिए।