अगर मैं ऐसा करते हैं:क्या पाइथन में स्टैक आधारित चर हैं?
def foo():
a = SomeObject()
है 'एक' तुरंत foo छोड़ने के बाद नष्ट कर दिया? या क्या यह कुछ जीसी होने की प्रतीक्षा करता है?
अगर मैं ऐसा करते हैं:क्या पाइथन में स्टैक आधारित चर हैं?
def foo():
a = SomeObject()
है 'एक' तुरंत foo छोड़ने के बाद नष्ट कर दिया? या क्या यह कुछ जीसी होने की प्रतीक्षा करता है?
हां और नहीं। फू छोड़ने के बाद ऑब्जेक्ट नष्ट हो जाएगा (जब तक कि इसका कोई और संदर्भ न हो), लेकिन चाहे वह तत्काल है या नहीं, कार्यान्वयन विवरण है, और अलग-अलग होगा।
सीपीथॉन (मानक पायथन कार्यान्वयन) में, refcounting का उपयोग किया जाता है, तो आइटम तुरंत नष्ट हो जाएगा। इसमें कुछ अपवाद हैं, जैसे कि जब वस्तु में चक्रीय संदर्भ होते हैं, या जब संदर्भ फ्रेम में संदर्भ होते हैं (उदाहरण के लिए। एक अपवाद उठाया जाता है जो फ्रेम के चर के संदर्भ को बरकरार रखता है।)
ज्योथन जैसे प्रत्यारोपण में या आयरनपीथन हालांकि, कचरा कलेक्टर में तब तक ऑब्जेक्ट को अंतिम रूप दिया नहीं जाएगा।
इस तरह, आपको वस्तुओं के समय पर अंतिम रूप देने पर भरोसा नहीं करना चाहिए, लेकिन केवल यह मानना चाहिए कि यह किसी बिंदु पर नष्ट हो जाएगा अंतिम संदर्भ चला जाता है। जब आपको लेक्सिकल स्कोप के आधार पर कुछ क्लीनअप करने की आवश्यकता होती है, तो या तो एक क्लीनअप विधि को स्पष्ट रूप से कॉल करें, या नया with statement पाइथन 2.6 में देखें ("from __future__ import with_statement
" के साथ 2.5 में उपलब्ध)।
+1: चर, 'ए' एक नामस्थान में है जिसे तुरंत हटा दिया गया है। यह संदर्भ संख्याओं में कमी है। परिवर्तनीय एक ढेर जैसी संरचना में मौजूद है। अंतर्निहित वस्तु नहीं है। –