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

पायथन में वस्तुओं को नष्ट करना (कचरा संग्रह)

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

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

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

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

नोट - आदर्श रूप से, आपको अपनी कक्षाओं को अलग फ़ाइल में परिभाषित करना चाहिए, फिर आपको उन्हें अपनी मुख्य प्रोग्राम फ़ाइल में आयात विवरण का उपयोग करके आयात करना चाहिए।


  1. एक सरणी में व्युत्क्रमों की गणना करने के लिए पायथन कार्यक्रम

    इस लेख में, हम नीचे दिए गए समस्या कथन के समाधान के बारे में जानेंगे। समस्या कथन - हमें एक सूची दी गई है, हमें आवश्यक व्युत्क्रम की गणना करने और उसे प्रदर्शित करने की आवश्यकता है। सरणी को क्रमबद्ध करने के लिए कितने चरणों की आवश्यकता है, इसकी गणना करके उलटा गणना प्राप्त की जाती है। आइए अब नीचे दिए

  1. पायथन में कक्षा या स्थिर चर?

    जब हम एक वर्ग के अंदर लेकिन किसी भी विधि के बाहर एक चर घोषित करते हैं, तो इसे पायथन में वर्ग या स्थिर चर कहा जाता है। कक्षा या स्थिर चर को एक वर्ग के माध्यम से संदर्भित किया जा सकता है लेकिन सीधे एक उदाहरण के माध्यम से नहीं। क्लास या स्टैटिक वेरिएबल काफी अलग हैं और समान नाम वाले किसी अन्य मेंबर वेर

  1. पायथन में फाइल ऑब्जेक्ट्स?

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