2012-11-25 10 views
7

संदर्भित करता है क्या पाइथन दुभाषिया उन मामलों को सुदृढ़ रूप से संभालता है जहां ऑब्जेक्ट इंस्टेंस स्वयं के अंतिम संदर्भ को हटा देता है?ऑब्जेक्ट को स्वयं

all_instances = [] 

class A(object): 
    def __init__(self): 
     global all_instances 
     all_instances.append(self) 

    def delete_me(self): 
     global all_instances 
     self.context = "I'm still here" 
     all_instances.remove(self) 
     print self.context 

और अब उपयोग::

निम्नलिखित (वैसे बेकार) मॉड्यूल पर विचार करें

import the_module 
a = the_module.A() 
the_deletion_func = a.delete_me 
del a 
the_deletion_func() 

यह अभी भी I'm still here मुद्रित होगा, लेकिन वहाँ पायथन के कचरा कलेक्टर के साथ एक रेस स्थिति है जो है वस्तु उदाहरण इकट्ठा करने के बारे में?
क्या ऑब्जेक्ट के फ़ंक्शन का संदर्भ दिन को बचाता है?
क्या दुभाषिया उस ऑब्जेक्ट का संदर्भ रखता है जिसका कोड वर्तमान में निष्पादित होने तक निष्पादित हो रहा है?

उत्तर

6

नहीं, ऐसी कोई दौड़ स्थिति नहीं है। आप संदर्भ को साफ़ कर रहे हैं, इसलिए रेफ गिनती 1 तक गिर जाती है और जब आप विधि संदर्भ हटाते हैं तो ऑब्जेक्ट साफ़ कर दिया जाएगा।

the_deletion_func एक विधि के संदर्भ बिंदु, जो उदाहरण (साथ ही कक्षा) को इंगित करता है, इसलिए वहां अभी भी एक संदर्भ है।

वर्तमान में निष्पादन विधियों में स्थानीय चर self है, जो कि उदाहरण के संदर्भ में भी है, लेकिन अधिकतर यह विधि रैपर है जो संदर्भ प्रदान करता है।

संबंधित मुद्दे