এটি আরও বর্ণনামূলকভাবে ব্যাখ্যা করার চেষ্টা করছি,
অপারেশন 1:
x = [[0, 0], [0, 0]]
print(type(x)) # <class 'list'>
print(x) # [[0, 0], [0, 0]]
x[0][0] = 1
print(x) # [[1, 0], [0, 0]]
অপারেশন 2:
y = [[0] * 2] * 2
print(type(y)) # <class 'list'>
print(y) # [[0, 0], [0, 0]]
y[0][0] = 1
print(y) # [[1, 0], [1, 0]]
লক্ষ্য করা গেল কেন প্রথম তালিকার প্রথম উপাদানটি সংশোধন করে প্রতিটি তালিকার দ্বিতীয় উপাদানটি সংশোধন করে না? এটার কারন[0] * 2
সত্যই দুটি সংখ্যার একটি তালিকা, এবং 0 এর একটি রেফারেন্স পরিবর্তন করা যায় না।
আপনি যদি ক্লোন অনুলিপি তৈরি করতে চান তবে অপারেশন 3 চেষ্টা করুন:
import copy
y = [0] * 2
print(y) # [0, 0]
y = [y, copy.deepcopy(y)]
print(y) # [[0, 0], [0, 0]]
y[0][0] = 1
print(y) # [[1, 0], [0, 0]]
ক্লোন অনুলিপি তৈরির আর একটি আকর্ষণীয় উপায়, অপারেশন 4:
import copy
y = [0] * 2
print(y) # [0, 0]
y = [copy.deepcopy(y) for num in range(1,5)]
print(y) # [[0, 0], [0, 0], [0, 0], [0, 0]]
y[0][0] = 5
print(y) # [[5, 0], [0, 0], [0, 0], [0, 0]]
[x]*3
3 টি রেফারেন্সের মতো স্টোর[x, x, x]
কেবল তখনই ঠিক হয় যখনx
পরিবর্তনযোগ্য হয়। যেমন এই does't কাজa=[4]*3
, যেখানে পরেa[0]=5
,a=[5,4,4].