Python अवांछित ऑब्जेक्ट्स (बिल्ट-इन टाइप्स या क्लास इंस्टेंस) को मेमोरी स्पेस खाली करने के लिए ऑटोमैटिकली डिलीट करता है। वह प्रक्रिया जिसके द्वारा Python समय-समय पर उन मेमोरी ब्लॉक्स को फ्री करता है और पुनः प्राप्त करता है जो अब उपयोग में नहीं हैं, गार्बेज कलेक्शन कहलाती है।
Python का गार्बेज कलेक्टर प्रोग्राम एक्ज़ीक्यूशन के दौरान चलता है और तब ट्रिगर होता है जब किसी ऑब्जेक्ट का रेफरेंस काउंट शून्य हो जाता है। किसी ऑब्जेक्ट का रेफरेंस काउंट उन एलियास की संख्या के रूप में बदलता है जो उस पर इशारा करते हैं।
किसी ऑब्जेक्ट का रेफरेंस काउंट बढ़ जाता है जब उसे नया नाम दिया जाता है या कंटेनर (लिस्ट, टपल, या डिक्शनरी) में रखा जाता है। ऑब्जेक्ट का रेफरेंस काउंट घट जाता है जब इसे del से डिलीट किया जाता है, इसका रेफरेंस रीअसाइन किया जाता है, या इसका रेफरेंस स्कोप से बाहर चला जाता है। जब किसी ऑब्जेक्ट का रेफरेंस काउंट शून्य हो जाता है, तो Python इसे ऑटोमैटिकली कलेक्ट करता है।
a = 40 # ऑब्जेक्ट <40> बनाएं b = a # <40> का रेफरेंस काउंट बढ़ाएं c = [b] # <40> का रेफरेंस काउंट बढ़ाएं del a # <40> का रेफरेंस काउंट घटाएं b = 100 # <40> का रेफरेंस काउंट घटाएं c[0] = -1 # <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)) # ऑब्जेक्ट्स के ids प्रिंट करता है
del pt1
del pt2
del pt3
आउटपुट
जब उपरोक्त कोड एक्ज़ीक्यूट किया जाता है, तो यह निम्न परिणाम उत्पन्न करता है:
3083401324 3083401324 3083401324 Point destroyed