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

पायथन में कचरा संग्रह

पायथन मेमोरी प्रबंधन सीधे आगे है। आपको स्मृति प्रबंधन के बारे में चिंता करने की आवश्यकता नहीं है, क्योंकि स्मृति आवंटन और डीलोकेशन स्वचालित है। स्मृति प्रबंधन के तंत्रों में से एक कचरा संग्रहण है। आइए कचरा संग्रहण के विभिन्न पहलुओं को समझते हैं,

कचरा संग्रह

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

मेमोरी प्रबंधन के लिए पायथन द्वारा उपयोग की जाने वाली दो विधियाँ हैं -

  • संदर्भ गणना
  • कचरा संग्रह

पायथन का कचरा संग्रह स्वचालित है, लेकिन कुछ प्रोग्रामिंग भाषाओं में, आपको वस्तुओं को स्वयं साफ करना होगा। पायथन में, आप चाहें तो वस्तुओं को मैन्युअल रूप से हटा सकते हैं।

>>> x = 9
>>> print(x)
9
>>> del x
>>> print(x)
Traceback (most recent call last):
   File "<pyshell#3>", line 1, in <module>
      print(x)
NameError: name 'x' is not defined

ऊपर हम केवल एक चर (x) को परिभाषित करते हैं और उसका उपयोग करते हैं। रनटाइम के दौरान, हम ऑब्जेक्ट को हटा देते हैं (क्योंकि पायथन में सब कुछ एक ऑब्जेक्ट है) और इसे आउटपुट करने का प्रयास करते हैं।

उपरोक्त कार्यक्रम की पहली दो पंक्तियों में, वस्तु x ज्ञात है। हालाँकि, ऑब्जेक्ट (x) को हटाने के बाद, हम इसे और प्रिंट नहीं कर सकते।

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

संदर्भ गणना परिवर्तन मान इस पर निर्भर करता है कि हम इसका उपयोग कैसे कर रहे हैं, उदाहरण के लिए, यदि हम ऑब्जेक्ट x को किसी अन्य ऑब्जेक्ट y को असाइन करते हैं, तो इसकी संदर्भ संख्या 2 तक बढ़ जाती है।

>>> some_list = [1, 2 ,3, 4, 5, 6, 7, 8, 9]
>>> #Reference count of some_list = 1
>>> other_list = some_list
>>> #Reference count = 2
>>> #This will also increases if we pass the object as an assignment
>>> list_total = sum(some_list)
>>> # If we put the object in a list, reference count will also increase
>>> list_of_list = [some_list, some_list, some_list]
>>>
>>> #Let's check the reference count of object "some_list"
>>> import sys
>>> sys.getrefcount(some_list)
6
ऑब्जेक्ट की रेफरेंस काउंट चेक करें।

अजगर में स्मृति प्रबंधन की संदर्भ गणना को समझने के लिए ऊपर एक अच्छा उदाहरण है। हम एक ऑब्जेक्ट "some_list" (संदर्भ गणना =1) बनाते हैं, हम इसे किसी अन्य ऑब्जेक्ट (रेफरी। गिनती =2) को असाइन करते हैं, हम ऑब्जेक्ट को तर्क के रूप में सेट करते हैं (रेफरी गिनती =3) और बाद में हम ऑब्जेक्ट को एक में डालते हैं सूची जहां वस्तु की घटना तीन गुना है (संदर्भ गणना =6)। बाद में जब हम "some_list" ऑब्जेक्ट की संदर्भ संख्या प्राप्त करने का प्रयास करते हैं, तो हमें 6 मिलता है।

>>> import sys
>>> sys.getrefcount(some_list)
6
>>>
>>> del list_of_list
>>> sys.getrefcount(some_list)
3
>>> del some_list
>>> sys.getrefcount(some_list)
Traceback (most recent call last):
   File "<pyshell#17>", line 1, in <module>
      sys.getrefcount(some_list)
NameError: name 'some_list' is not defined

  1. पायथन वस्तु तुलना "है" बनाम "=="

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

  1. पाइथन में कचरा संग्रहण कैसे काम करता है?

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

  1. पायथन में टाइम टुपल क्या है?

    datetime.date उदाहरणों की timetuple() विधि time.struct_time प्रकार की वस्तु लौटाती है। स्ट्रक्चर_टाइम एक नामित टपल ऑब्जेक्ट है (एक नामित टपल ऑब्जेक्ट में ऐसे गुण होते हैं जिन्हें किसी इंडेक्स या नाम से एक्सेस किया जा सकता है)। डेलाइट सेविंग टाइम सक्रिय है या नहीं यह इंगित करने के लिए स्ट्रक्चर_टाइम