2015-11-29 25 views
6

giảng viên của tôi đã đặt một số câu hỏi về python, và điều này đã khiến tôi bối rối, tôi không hiểu những gì đang xảy ra.Tại sao Python mở rộng đầu ra [[...]]

x = [[]] 
x[0].extend(x) 

Python nói với tôi, sau khi chạy này rằng x là [[...]], những gì hiện các ... nghĩa là gì?

Tôi thậm chí còn bối rối hơn khi kết quả các nội dung sau chỉ là [[]]

y = [] # equivalent to x[0] 
x = [[]] 
y.extend(x) 

Nếu y được tính là [[]] không x nên được tính toán để chỉ đơn giản là [[[]]]?

Mở rộng là gì? và ý nghĩa của ... là gì?

+0

Vì tham chiếu 'x',' str (x) 'là một vòng lặp vô hạn. Tốt đẹp của nó mà python bắt nó. – tdelaney

Trả lời

6

... cho biết danh sách có chứa một vòng lặp đệ quy, tức là ở cấp độ nào đó có chứa nội dung nào đó. Điều này là do bạn đã mở rộng x với x, do đó, về cơ bản bạn đặt x bên trong chính nó.

Không có ... trong ví dụ thứ hai vì y là một đối tượng riêng biệt. Mặc dù nó xảy ra là bằng đến x[0] trong đó cả hai danh sách trống đều không phải là danh sách trống.

+0

Vì vậy, bằng cách mở rộng 'x [0]' với 'x', nó tạo tham chiếu đến' x' tại 'x [0]', thay vì sao chép dữ liệu 'x' chứa' x [0] '? Có đúng không? – CGA1123

+1

@ CGA1123: Về cơ bản, có. (Cụ thể hơn, nó đang tạo một tham chiếu đến 'x [0]' bên trong danh sách tại 'x [0]', vì 'extend' thêm nội dung của đối số của nó, chứ không phải chính đối số. Nhưng bạn đúng là nó tạo một tham chiếu đến cùng một đối tượng, không sao chép dữ liệu, và đó là chìa khóa.) – BrenBarn

+0

Ah phải, cảm ơn! – CGA1123

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