2012-03-28 13 views
11

मैं अजगर के क्षेत्र में नये हूँ लेकिन मैं समझता हूँ कि चीजों को इस तरह से नहीं किया जाना चाहिए, तो विशुद्ध रूप से शैक्षिक :-) के रूप में निम्नलिखित कोड के टुकड़े पर विचार करेंसूची संशोधन

मैं वर्तमान में कर रहा हूँ पढ़ने 'लर्निंग अजगर' और पूरी तरह से निम्न उदाहरण समझने की कोशिश कर:

>>> L = [1, 2, 3, 4, 5] 
>>> for x in L: 
... x += 1 
... 
>>> L 
[1, 2, 3, 4, 5] 

मैं समझ में नहीं आया, तो इस व्यवहार कुछ हद तक सांख्यिक प्रकार की अचल से संबंधित था, इसलिए मैं निम्नलिखित परीक्षण किया है:

>>> L = [[1], [2], [3], [4], [5]] 
>>> for x in L: 
... x += ['_'] 
... 
>>> L 
[[1, '_'], [2, '_'], [3, '_'], [4, '_'], [5, '_']] 

प्रश्न: सूची को पहले कोड में अपरिवर्तित करता है और दूसरे में बदल जाता है?

मेरे अंतर्ज्ञान है कि वाक्य रचना भ्रामक है और वह यह है कि:

  • एक पूर्णांक के लिए x += 1 वास्तव में x = x + 1 का मतलब है एक सूची के लिए
  • x += ['_'] (इस प्रकार एक नया संदर्भ बताए) वास्तव में x.extend('_') (इस प्रकार बदल रहा है इसका मतलब है जगह में सूची)
+7

आपकी अंतर्ज्ञान सही है –

+3

और पूर्णता के लिए, ऐसा करने के लिए "सही" तरीका 'x में x के लिए x = 1] – Kimvais

+0

@ किमवाइस: मानता है कि आप एक नई सूची बनाना चाहते हैं। – MattH

उत्तर

5

प्रश्न: सूची को पहले कोड में अपरिवर्तित करता है और दूसरे में बदल जाता है?

पहले कोड में, सूची (अपरिवर्तनीय) पूर्णांक का अनुक्रम है। बदले में अनुक्रम के प्रत्येक तत्व को संदर्भित करने के लिए लूप x सेट करता है। x += 1x बदलता है जो कि एक अलग पूर्णांक को संदर्भित करता है जो पहले x मान से अधिक है। मूल सूची में तत्व अपरिवर्तित है।

दूसरे कोड में, सूची (उत्परिवर्तनीय) सूचियों का अनुक्रम यदि सूची है। बदले में अनुक्रम के प्रत्येक तत्व को संदर्भित करने के लिए लूप x सेट करता है। x += ['_']x के रूप में एक सूची को संदर्भित करता है, यह x द्वारा ['_'] के साथ संदर्भित सूची को बढ़ाता है।

+0

तो यह वास्तव में पूर्णांक की अपरिवर्तनीयता है जो इसे बताता है, धन्यवाद! – icecrime

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