พยายามอธิบายให้ละเอียดยิ่งขึ้น
การดำเนินงาน 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
ก็ต่อเมื่อไม่แน่นอน งานนี้กวนสำหรับเช่นa=[4]*3
ที่หลังa[0]=5
,a=[5,4,4].