पायथन मेमोरी प्रबंधन सीधे आगे है। आपको स्मृति प्रबंधन के बारे में चिंता करने की आवश्यकता नहीं है, क्योंकि स्मृति आवंटन और डीलोकेशन स्वचालित है। स्मृति प्रबंधन के तंत्रों में से एक कचरा संग्रहण है। आइए कचरा संग्रहण के विभिन्न पहलुओं को समझते हैं,
कचरा संग्रह
यह वह प्रक्रिया है जिसके द्वारा साझा कंप्यूटर मेमोरी को साफ किया जाता है जिसे वर्तमान में एक चल रहे प्रोग्राम द्वारा उपयोग में लाया जा रहा है जब उस प्रोग्राम को अब उस मेमोरी की आवश्यकता नहीं होती है। कचरा संग्रहण के साथ, उस मुक्त स्मृति का उपयोग किसी अन्य प्रोग्राम द्वारा किया जा सकता है।
मेमोरी प्रबंधन के लिए पायथन द्वारा उपयोग की जाने वाली दो विधियाँ हैं -
- संदर्भ गणना
- कचरा संग्रह
पायथन का कचरा संग्रह स्वचालित है, लेकिन कुछ प्रोग्रामिंग भाषाओं में, आपको वस्तुओं को स्वयं साफ करना होगा। पायथन में, आप चाहें तो वस्तुओं को मैन्युअल रूप से हटा सकते हैं।
>>> 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