Cách 1:
a=[[0]*6]*5
print(a)
a[1][1]=-1
print(a)
Output:
[[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0]]
[[0, -1, 0, 0, 0, 0],
[0, -1, 0, 0, 0, 0],
[0, -1, 0, 0, 0, 0],
[0, -1, 0, 0, 0, 0],
[0, -1, 0, 0, 0, 0]]
Chuyện gì đang xảy ra. Nếu như mình nghĩ thì chỉ có một ô được thay đổi thành -1
nhưng ở đây tất cả đều đổi. Tại sao?
Với cách này thì chúng đều trỏ đến cùng một đối tượng. do vây khi thay đổi một cái nó sẽ thay đổi tất.
Tham khảo
https://stackoverflow.com/questions/6007881/what-does-the-0x-syntax-do-in-python
Be warned that they all point to the same object. This is cool for immutables like integers but a pain for things like lists.
Cách 2: Nên dùng cách này
b= [[0 for k in range(6)] for l in range(5)]
print(b)
b[1][1]=-1
print(b)
[[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0]]
[[0, 0, 0, 0, 0, 0],
[0, -1, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0]]