Kết quả là [[1, 0, 0], [1, 0, 0]] — cả hai hàng cùng đổi.
Toán tử * trên list không sao chép phần tử, nó chỉ nhân bản tham chiếu: hai "hàng" thực chất là một object.
python
row = [0] * 3
grid = [row] * 2
grid[0] is grid[1] # True — the same list objectRiêng [0] * 3 vẫn đúng như mong đợi vì 0 là immutable: gán row[0] = 1 là thay ô trong list chứ không sửa chính số 0.
Cách đúng — tạo list mới cho từng hàng bằng comprehension:
python
grid = [[0] * 3 for _ in range(2)]
grid[0][0] = 1 # [[1, 0, 0], [0, 0, 0]]Bản chất giống bẫy default argument: trong Python, gán và nhân bản container mặc định là chia sẻ tham chiếu, không phải copy.