Tôi có thể thiếu điều gì đó về hành vi dự định của danh sách mở rộng, nhưng tại sao những điều sau xảy ra?Mở rộng danh sách các danh sách bằng Python?
x = [[],[]]
y = [[]] * 2
print x # [[],[]]
print y # [[],[]]
print x == y # True
x[0].extend([1])
y[0].extend([1])
print x # [[1],[]], which is what I'd expect
print y # [[1],[1]], wtf?
Tôi đoán nhà điều hành *
đang làm điều gì đó bất ngờ ở đây, mặc dù tôi không chắc chắn chính xác điều gì. Nó có vẻ như một cái gì đó đang xảy ra dưới mui xe mà làm cho x và y ban đầu (trước khi gọi mở rộng) không thực sự được bình đẳng mặc dù các nhà điều hành ==
và repr
cả hai sẽ làm cho nó có vẻ như là họ giống hệt nhau.
Tôi chỉ gặp vấn đề này vì tôi muốn điền trước một danh sách các danh sách trống có kích thước xác định trong thời gian chạy, và sau đó nhận ra rằng nó không hoạt động theo cách tôi tưởng tượng. Tôi có thể tìm thấy một cách tốt hơn để làm điều tương tự, nhưng bây giờ tôi tò mò là tại sao điều này không hiệu quả. Đây là Python 2.5.2 BTW - Tôi không có một phiên bản mới hơn được cài đặt vì vậy nếu đây là một lỗi tôi không chắc chắn nếu nó đã được cố định.
Tôi biết những gì phụ thêm, tôi vừa mới đưa ra một ví dụ giả tạo vì lợi ích của câu hỏi. –