2013-12-14 8 views
5

मैंने पाया कुछ सवाल TypeError: 'tuple' object does not support item assignment आदि के बारे में पूछ रहे हैं, लेकिन अभी भी, मैं इस बारे में उलझन में हूँ:पायथन ट्यूपल, क्या कोई इस व्यवहार को समझा सकता है?

>>> a = ([],[]) 
>>> a[0].append(1)  # 1 
>>> a 
([1], []) 
>>> a[0] += [2] 

Traceback (most recent call last): 
    File "<pyshell#5>", line 1, in <module> 
    a[0] += [2] 
TypeError: 'tuple' object does not support item assignment # 2 
>>> a 
([1, 2], []) # 3 
>>> 

मेरे सवाल कर रहे हैं:

  1. tuples हैं

    कोड स्निपेट पर विचार करें अपरिवर्तनीय, लेकिन 1 सफलतापूर्वक अपना मूल्य बदल गया। क्यों? (मुझे पता है कि मैं वास्तव में पाइथन अपरिवर्तनीयता को समझ नहीं पा रहा हूं ..)

  2. यदि 1 Accepte है डी, 2TypeError बढ़ाने का कारण क्या है?
  3. 3 में, a संशोधित हो गया है, तो TypeError को बढ़ाने का क्या मतलब है?

आप

+0

पहले के लिए, http://docs.python.org/3/reference/datamodel.html#objects-values-and-types देखें - मूल रूप से, "tuples अपरिवर्तनीय हैं" केवल इसका अर्थ है "आप जोड़ नहीं सकते हैं, हटा सकते हैं या एक tuple में वस्तुओं को प्रतिस्थापित करें, "नहीं" एक ट्यूपल में निहित वस्तुएं भी अपरिवर्तनीय हैं "। – delnan

उत्तर

0

यह क्योंकि tuples अपरिवर्तनीय हैं धन्यवाद, लेकिन यह अस्थायी डेटा प्रकार एक तत्व के रूप (उर मामले में एक सूची) हो सकते हैं।

आपका ट्यूपल a = ([], []) सूचियों का एक समूह है। इसलिए यही कारण है कि आप डेटा को [0] में जोड़ सकते थे - जो एक सूची है।

इस में:

a[0] += 2 

आप टपल जो अपवाद लेखन त्रुटि

तीन में ('=' असाइनमेंट ऑपरेटर के उपयोग के कारण) को जन्म देती है के मूल्य को बदलने के लिए प्रयास कर रहे थे, सूची '+' ऑपरेटर के उपयोग के कारण मिल गया।

+0

-1 आपका उत्तर यह नहीं पता कि कैसे '[0] + = 2' tuple को संशोधित करने का प्रयास करता है, क्योंकि मूर्खतापूर्ण, मैं उम्मीद करता हूं कि केवल सूची ऑब्जेक्ट को संशोधित करें। 'एक [0]' 'ए' से अलग है। –

+0

एक [0] = एक [0] + [2], यहां दाएं हाथ की तरफ एक त्रुटि के बिना पूरा किया गया है (संयोग होता है), और जब परिणाम को [0] को असाइन करने का प्रयास करते हैं तो आप वास्तव में ट्यूपल के लिए एक मान निर्दिष्ट कर रहे हैं , तो यह एक त्रुटि फेंक दिया है। मैं गलत हो सकता हूं। लेकिन यह वही है जो मैंने समझा। – Praveen

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