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

पायथन में ऑब्जेक्ट्स को नष्ट करना (गार्बेज कलेक्शन)


पायथन अनावश्यक ऑब्जेक्ट्स (बिल्ट-इन टाइप्स या क्लास इंस्टेंसेस) को स्वचालित रूप से डिलीट करके मेमोरी स्पेस खाली करता है। वह प्रक्रिया जिसके द्वारा पायथन समय-समय पर उन मेमोरी ब्लॉक्स को पुनः प्राप्त करता है जो अब उपयोग में नहीं हैं, उसे गार्बेज कलेक्शन कहा जाता है।

पायथन का गार्बेज कलेक्टर प्रोग्राम निष्पादन के दौरान चलता है और तब ट्रिगर होता है जब किसी ऑब्जेक्ट का रेफरेंस काउंट शून्य तक पहुंच जाता है। किसी ऑब्जेक्ट का रेफरेंस काउंट उन एलियास की संख्या के रूप में बदलता है जो उस पर इंगित करते हैं।

जब किसी ऑब्जेक्ट को एक नया नाम दिया जाता है या किसी कंटेनर (लिस्ट, टुपल, या डिक्शनरी) में रखा जाता है, तो उसका रेफरेंस काउंट बढ़ जाता है। जब इसे del से डिलीट किया जाता है, इसका रेफरेंस पुनः असाइन किया जाता है, या इसका रेफरेंस स्कोप से बाहर चला जाता है, तो ऑब्जेक्ट का रेफरेंस काउंट घट जाता है। जब किसी ऑब्जेक्ट का रेफरेंस काउंट शून्य तक पहुंच जाता है, तो पायथन उसे स्वचालित रूप से कलेक्ट करता है।

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. पायथन प्रोग्राम: सरणी में इनवर्जन गिनें पायथन प्रोग्राम: सरणी में इनवर्जन गिनें

    इस लेख में हम दी गई समस्या के समाधान के बारे में जानेंगे। समस्या कथन हमें एक लिस्ट दी गई है, हमें आवश्यक इनवर्जन गिनने और प्रदर्शित करने हैं। इनवर्जन काउंट यह गिनकर प्राप्त किया जाता है कि सरणी को क्रमबद्ध करने के लिए कितने चरणों की आवश्यकता है। उदाहरण arr[j]): inv_count += 1 re

  1. - पायथन में क्लास या स्टेटिक वेरिएबल्स

    जब किसी क्लास के अंदर लेकिन किसी मेथड के बाहर वेरिएबल घोषित किया जाता है, तो उसे क्लास वेरिएबल या स्टेटिक वेरिएबल कहा जाता है। यह सभी इंस्टेंसेज़ द्वारा साझा किया जाता है। उदाहरण 1: काउंटर के रूप में उपयोग class Fruits: count = 0 # क्लास वेरिएबल def __init__(self, name, count): se

  1. पायथन में फाइल ऑब्जेक्ट्स: पूरी गाइड पायथन में फाइल ऑब्जेक्ट्स: पूरी गाइड

    पायथन में, जब भी हम फाइल्स पढ़ने या लिखने का प्रयास करते हैं, हमें कोई लाइब्रेरी इम्पोर्ट करने की आवश्यकता नहीं होती क्योंकि यह नेटिवली हैंडल किया जाता है। सबसे पहली चीज जो हम करेंगे वह है बिल्ट-इन open फंक्शन का उपयोग करके एक फाइल ऑब्जेक्ट प्राप्त करना। open फंक्शन एक फाइल खोलता है और एक फाइल ऑब्ज