2015-11-29 18 views
6

मेरे व्याख्याता ने अजगर पर कई प्रश्न सेट किए हैं, और इसने मुझे भ्रमित कर दिया है, मुझे नहीं पता कि क्या हो रहा है।पाइथन आउटपुट का विस्तार क्यों करता है [[...]]

x = [[]] 
x[0].extend(x) 

अजगर मुझसे कहता है, चल रहा है इस कि एक्स [[...]] है, क्या ... मतलब है के बाद?

मैं और भी अधिक भ्रमित हो जब निम्न का नतीजा बस है [[]]

y = [] # equivalent to x[0] 
x = [[]] 
y.extend(x) 

तो y होने की [[]] बस [[[]]] जा रहा है के लिए नहीं x गणना की जानी चाहिए गणना की जाती है?

क्या बढ़ रहा है? और ... का क्या अर्थ है?

+0

क्योंकि 'x' संदर्भ स्वयं,' str (x) 'एक अनंत लूप है। यह अच्छा है कि अजगर इसे पकड़ता है। – tdelaney

उत्तर

6

... इंगित करता है कि सूची में एक रिकर्सिव लूप होता है, यानी, कुछ स्तर पर कुछ स्वयं होता है। ऐसा इसलिए है क्योंकि आपने xx के साथ बढ़ाया है, इसलिए आप अनिवार्य रूप से x को अपने अंदर रख दें।

दूसरे उदाहरण में ... कोई कारण नहीं है क्योंकि y एक विशिष्ट वस्तु है। हालांकि यह बराबर से x[0] होता है, जिसमें दोनों खाली सूचियां हैं, वे एक ही खाली सूची नहीं हैं।

+0

तो 'x' के साथ 'x [0]' को बढ़ाकर, यह 'x' के संदर्भ में 'x' पर 'x' का संदर्भ बना रहा है, जो 'x'' x '0] 'में मौजूद डेटा को कॉपी करने के बजाय है? क्या वह सही है? – CGA1123

+1

@ CGA1123: असल में, हाँ। (अधिक विशेष रूप से, यह 'x [0]' पर सूची के अंदर 'x [0] 'का संदर्भ बना रहा है, क्योंकि' विस्तार 'तर्क के विषय को जोड़ता है, तर्क नहीं। लेकिन आप सही हैं कि यह सही है उसी ऑब्जेक्ट का संदर्भ बनाना, डेटा कॉपी नहीं करना, और वह कुंजी है।) – BrenBarn

+0

आह ठीक है, धन्यवाद! – CGA1123

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