Chỉ khi tôi nghĩ rằng tôi đã hiểu thế nào danh sách Python làm việc ...Sao chép danh sách python
>>> a = [1,2,3]
>>> b = a[:]
>>> b
[1,2,3]
>>> b[1]=100
>>> b
[1,100,3]
>>> a
[1,2,3]
Cho đến nay, như vậy tốt. Tôi đang khởi tạo b với nội dung của a, sao cho b trỏ đến một đối tượng khác. Kết quả là, những thay đổi trong b không ảnh hưởng đến a.
Bây giờ hãy nhìn vào ví dụ khác này:
>>> a = [[1,2,3],[4,5,6],[7,8,9]]
>>> b = a[:][:]
>>> b
[[1,2,3],[4,5,6],[7,8,9]]
>>> b[1][1] = 100
>>> b
[[1,2,3],[4,100,6],[7,8,9]]
>>> a
[[1,2,3],[4,100,6],[7,8,9]]
Tại sao sự thay đổi trong b ảnh hưởng một thời gian này? Điều gì khác với ví dụ trước?
Lưu ý rằng việc sử dụng '[:]' để sao chép là một chút khó hiểu - thường tôi thấy nó đẹp hơn nhiều khi sử dụng 'list()' hoặc 'copy.copy()', tùy thuộc vào ngữ cảnh. (Tất nhiên, như được chỉ ra trong câu trả lời, 'copy.deepcopy()' có thể là những gì bạn muốn ở đây). –