এই চ্যাপ্টারে আমরা দেখব টাপল (tuple) -যা আসলে ইমিউটেবল- এর ভ্যালু আপডেট করার সময় কী হয়। নতুন ভ্যালু পুরনোয় মার্জ করা যায় কিন্তু এরর থ্রো করে। এররটির বাইটকোড অধ্যটন করলে টাপলের নিয়ম ভালোভাবে বোঝা যায়।
প্রথমে একটি টাপল ডিফাইন করি এবং এর লাস্ট এলিমেন্ট আপডেট করার কমান্ড দিই।
উদাহরণ
>>> 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নিষ্কর্ষ: টাপলে মিউটেবল এলিমেন্ট রাখা উচিত নয়। অ্যাসাইনমেন্ট সম্ভব হলেও এক্সেপশন থ্রো করে। স্টেপ ৪৬-এ দেখানো হয়েছে অ্যাসাইনমেন্ট ফেইল করেছে কারণ টাপল ইমিউটেবল অবজেক্ট।