16

मैं अजगर के लिए आधिकारिक दस्तावेज में देखा है, लेकिन मैं क्या एक संदर्भ चक्र है खोजने के लिए प्रतीत नहीं कर सकते हैं। क्या कोई यह स्पष्ट कर सकता है कि यह मेरे लिए क्या है, क्योंकि मैं जीसी मॉड्यूल को समझने की कोशिश कर रहा हूं। आपके उत्तरों के लिए अग्रिम धन्यवाद।पायथन में संदर्भ चक्र क्या है?

l = [] 
l.append(l) 

l के पहले तत्व है, यानी l[0], अब l ही एक चक्रीय संदर्भ है:

उत्तर

15

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

a.other = b 
b.some_attr = a 

अनुभवहीन कचरा कलेक्टरों की एक वस्तु किसी अन्य वस्तु द्वारा संदर्भित है या नहीं, बंद सख्ती से काम करते हैं:

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

संपादित करें: अब यहाँ

a = [] 
a.append(a) 
10

यह एक संदर्भ चक्र है।

3
>>> x=[1,2,3] 
>>> x.append(x) 
>>> x 
[1, 2, 3, [...]] 
>>> 

: सरल संदर्भ चक्र एक वस्तु है जो अपने आप को संदर्भित करता है परिवर्तनीय x खुद का जिक्र कर रहा है, इसे संदर्भ चक्र कहा जाता है।

7
>>> aRef = [] 
>>> aRef.append(aRef) 
>>> print aRef 
[[...]] 

यह एक सूची वस्तु aRef नामक एक चर द्वारा संदर्भित पैदा करता है। सूची वस्तु में first element स्वयं का संदर्भ है। इस मामले में, del aRef भिन्नता aRef सूची ऑब्जेक्ट के लिए। हालांकि, सूची वस्तु के संदर्भ गिनती शून्य करने के लिए कमी नहीं करता है और इस सूची में वस्तु के बाद से सूची वस्तु अभी भी खुद को संदर्भित करता है, कचरा एकत्र नहीं है। इस मामले में, पायथन में कचरा कलेक्टर समय-समय पर जांच करेगा कि क्या इस तरह के परिपत्र संदर्भ मौजूद हैं और दुभाषिया उन्हें एकत्र करेगा। सर्कुलर संदर्भित वस्तुओं द्वारा उपयोग की जाने वाली जगह को मैन्युअल रूप से एकत्र करने के लिए निम्नलिखित उदाहरण है।

>>> import gc 
>>> gc.collect() 
0 
>>> del aRef 
>>> gc.collect() 
1 
>>> gc.collect() 
0 
संबंधित मुद्दे