2013-05-24 37 views

Trả lời

7
[[]] * 2 

làm cho một shallow copy. Tương đương với:

x = [] 
t0 = [x, x] 

Tuy nhiên

t1 = [[], []] 

Sử dụng hai chữ danh sách trống riêng biệt, họ là hoàn toàn khác nhau để biến đổi một rõ ràng là không đột biến khác

+0

Nếu tôi muốn khai báo danh sách có n danh sách trống, tôi có thể làm như thế nào? –

+0

@ user1807991 'items = [[] cho i trong phạm vi (N)]' thông báo cách này chỉ sử dụng danh sách trống theo nghĩa đen trong danh sách để đảm bảo chúng là riêng biệt – jamylak

10

Khi bạn làm [[]] * 2, danh sách này sẽ cung cấp cho bạn danh sách chứa hai số cùng một danh sách, thay vì hai danh sách. Nó giống như thực hiện:

a = [] 
b = [a, a] 

Cách thông thường để tạo ra một danh sách có chứa nhiều khác nhau danh sách rỗng (hoặc đối tượng có thể thay đổi khác) là để làm điều này:

t1 = [[] for _ in range(5)] 
+0

Thậm chí tốt hơn có thể là để chỉ ra có thể thay đổi, so với đối tượng không thay đổi. Chẳng hạn như hiển thị sự khác biệt về hành vi với các bộ và danh sách ở đây? – Arafangion

Các vấn đề liên quan