Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Python

Python में गार्बेज कलेक्शन कैसे काम करता है?

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
  1. - पायथन में [\d+] रेगुलर एक्सप्रेशन कैसे काम करता है?

    निम्नलिखित कोड दर्शाता है कि दिए गए स्ट्रिंग पर रेगुलर एक्सप्रेशन [\d+] क्या करता है: [\d+] रेगुलर एक्सप्रेशन एक अंक (0-9) या + कैरेक्टर को संदर्भित करता है। उदाहरण import re result = re.findall(r[\d+], Taran123tula+456) print(result) आउटपुट [1, 2, 3, +, 4, 5, 6]

  1. - पायथन फ़ाइलों में अंडरस्कोर _ कैसे काम करता है?

    अंडरस्कोर (_) पायथन में विशेष है। पायथन में अंडरस्कोर का उपयोग करने के 5 मुख्य मामले हैं। 1. इंटरप्रेटर में अंतिम एक्सप्रेशन का मान स्टोर करना पायथन इंटरप्रेटर अंतिम एक्सप्रेशन के मान को _ नामक विशेष वेरिएबल में स्टोर करता है। >>> 12 + 10 22 >>> _ 22 2. विशिष्ट मानों को अनदेखा करन

  1. - पायथन में mkdir -p कैसे काम करता है?

    mkdir -p का उपयोग पैरेंट के मौजूद होने पर भी रिकर्सिव डायरेक्टरी बनाने की अनुमति देने के लिए किया जाता है। रिकर्सिवली डायरेक्टरी बनाने के लिए, उस पथ को प्रदान करें जिसे आप os.makedirs(path) में बनाना चाहते हैं। रिकर्सिवली डायरेक्टरी बनाने के लिए, आपको मौजूदा फ़ोल्डर्स को अनुमति देने के लिए exist_ok