में मैन्युअल कचरा संग्रह क्या कोई ऑब्जेक्ट मैन्युअल रूप से निकालने का कोई तरीका है जिसे कचरा संग्रह से छुटकारा पाने से इंकार कर दिया जाता है जब भी मैं gc.collect()
पर कॉल करता हूं? पायथन 3.0पायथन
पायथन
उत्तर
the docs के अनुसार, gc.get_referrers(thatobject)
आप से अवगत कराएगा वस्तु अभी भी जीवित है (सही एक gc.collect()
के बाद यह कर सुनिश्चित करें कि अवांछित "जीवंतता" बनाने के लिए लगातार बनेगा)। उसके बाद, यह किसी भी तरह का काला कला है ;-)। आपको अक्सर पता चलेगा कि कुछ रेफरर्स सूचियां हैं (तो क्यों यह सूची thatobject
का जिक्र है? आप .remove
इसे आपातकालीन मोड में कर सकते हैं, लेकिन सामान्य कोड ध्वनि बनाना बेहतर है ...), और, और भी अक्सर, dict
एस (जिनमें से कई __dict__
एस कुछ वर्ग उदाहरण या अन्य के हो सकते हैं - अक्सर यह पता लगाने के लिए तुच्छ नहीं है कि ... फिर, ब्रूट-फोर्स हटाने कभी-कभी एक आपातकालीन आपातकालीन समाधान होता है, लेकिन कभी भी एक टिकाऊ लंबी दूरी नहीं है -)।
पर काम करना यह आपके पायथन पर चल रहा है इस पर निर्भर करता है। Here's good article कि विवरण
का हवाला देते हुए बताते हैं:
CPython की वर्तमान विज्ञप्ति में, लूप के अंदर एक्स के लिए प्रत्येक नया असाइनमेंट पहले से आवंटित संसाधन जारी करेंगे। जीसी का उपयोग करना, इसकी गारंटी नहीं है। यदि आप कोड लिखना चाहते हैं जो किसी भी पायथन कार्यान्वयन के साथ काम करेगा, तो आपको संसाधन को स्पष्ट रूप से बंद करना चाहिए; इस जीसी की परवाह किए बिना काम करेंगे:
for name in big_list:
x = Resource()
do something with x
x.close()
जीसी इसे नष्ट करने के लिए मना किया गया है, क्योंकि आप इसे करने के लिए एक संदर्भ कहीं यह है। संदर्भ से छुटकारा पाएं और यह (अंत में) जाएगा। उदाहरण के लिए:
myRef = None
ध्यान रखें कि जीसी जरूरी अपने वस्तु नहीं नष्ट कर सकते हैं, जब तक यह करने की जरूरत में रखें।
यदि आपकी ऑब्जेक्ट पाइथन के प्रबंधन के तहत संसाधनों को नहीं रखती है (उदाहरण के लिए, पाइथन से सी कोड के साथ कुछ चालबाजी), ऑब्जेक्ट को संसाधन रिलीज कॉल प्रदान करना चाहिए ताकि जब आप पाइथन निर्णय लेते हैं तो आप इसे कर सकते हैं ।
del
या None
अपने केवल दोस्त हैं
>>> a = "Hello"
>>> a = None
Or
>>> del a
जरूरी नहीं कि सच है। ऑब्जेक्ट को पुनः प्राप्त करने के योग्य होने के लिए केवल पहुंच योग्य (या एक स्वीकार्य रूप से डिस्पोजेबल रेफ-गिनती है, जो बहुत उम्मीदवार से सहमत है) होने की आवश्यकता है। –
'del a' ऑब्जेक्ट को हटा नहीं देता है (केवल एक नोट; इसका अर्थ यह नहीं है कि आप इसका मतलब है) – hasen
पायथन के बारे में पता नहीं है लेकिन कुछ कचरा कलेक्टर कभी-कभी गलती से सोचते हैं कि चीजें अभी भी उपयोग में हैं क्योंकि उन्हें लगता है कि इन वस्तुओं के संदर्भ में * क्या दिखाई देने वाला * दिखाई देता है (लेकिन वास्तव में नहीं)। ऐसे मामलों में आप इतना कुछ नहीं कर सकते हैं। – Artelius
इसके अलावा, आपको पायथन 3.1 ASAP पर जाना चाहिए। 3.0 में कई ज्ञात समस्याएं हैं और अब समर्थित नहीं है। –
जैसे ही मैं सम्मान खत्म करता हूं, मेरा इरादा है। – Casebash