इस अध्याय में हम देखते हैं कि जब हम टपल में मानों को अपडेट करते हैं तो क्या होता है, जो वास्तव में अपरिवर्तनीय है। हम नए मानों को पुराने मानों के साथ मर्ज कर सकते हैं लेकिन यह त्रुटि फेंकता है। हम त्रुटि के बाइटकोड का अध्ययन कर सकते हैं और बेहतर समझ सकते हैं कि टपल के नियम कैसे काम करते हैं।
पहले हम एक टपल परिभाषित करते हैं और फिर इसके अंतिम तत्व को अपडेट करने का कमांड जारी करते हैं जैसा कि नीचे दिखाया गया है।
उदाहरण
>>> tupl = (5, 7, 9, [1, 4]) >>> tupl[3] += [6, 8]
आउटपुट
Traceback (most recent call last): File "", line 1, in TypeError: 'tuple' object does not support item assignment >>> tupl (5, 7, 9, [1, 4, 6, 8])
अब उपरोक्त दृष्टिकोण के बाइट कोड का अध्ययन करने के लिए हम कोड को एक फ़ंक्शन में डालते हैं और बाइट कोड प्रदर्शित करने के लिए dis विधि लागू करते हैं। हमें वही त्रुटि मिलती है लेकिन अधिक विवरण के साथ।
उदाहरण
def immut_function():
tupl = (5, 7, 9, [1, 4])
tupl[3] += [6, 8]
immut_function()
आउटपुट
TypeError Traceback (most recent call last)
in ()
2 tupl = (5,7,9,[1,4])
3 tupl[3] += [6,8]
----> 4 immut_function()
in immut_function()
1 def immut_function():
2 tupl = (5,7,9,[1,4])
----> 3 tupl[3] += [6,8]
4 immut_function()
TypeError: 'tuple' object does not support item assignment
अब हम उपरोक्त फ़ंक्शन के बाइटकोड को प्रदर्शित करते हैं ताकि टपल असाइनमेंट और त्रुटियों का विवरण देखा जा सके।
उदाहरण
import dis dis.dis(immut_function)
आउटपुट
2 0 LOAD_CONST 1 (5)
3 LOAD_CONST 2 (7)
6 LOAD_CONST 3 (9)
9 LOAD_CONST 4 (1)
12 LOAD_CONST 5 (4)
15 BUILD_LIST 2
18 BUILD_TUPLE 4
21 STORE_FAST 0 (tupl)
3 24 LOAD_FAST 0 (tupl)
27 LOAD_CONST 6 (3)
30 DUP_TOPX 2
33 BINARY_SUBSCR
34 LOAD_CONST 7 (6)
37 LOAD_CONST 8 (8)
40 BUILD_LIST 2
43 INPLACE_ADD
44 ROT_THREE
45 STORE_SUBSCR
46 LOAD_CONST 0 (None)
49 RETURN_VALUE
निष्कर्ष यह है कि टपल में परिवर्तनीय तत्व न डालें। हालांकि असाइनमेंट संभव है, यह अपवाद फेंकता है। जैसा कि मान 46 वाले चरण में दिखाया गया है, असाइनमेंट विफल हो जाता है क्योंकि टपल एक अपरिवर्तनीय ऑब्जेक्ट है।