2010-03-16 19 views
6

Đây là mã:danh sách Python không phải là tài liệu tham khảo cùng

L=[1,2] 

L is L[:] 

False 

Tại sao điều này sai?

+0

Hãy thử điều này, nó có thể là sâu sắc quá: 'L [:] là L [:]' – fortran

+0

trữ 'is' thử nghiệm để kiểm tra chống lại Không có hoặc độc thân khác (như các lớp học hoặc mô-đun), nếu không, bạn sẽ được rất có thể quan tâm đến '==' thử nghiệm (và có, tôi biết '1 là 1' thường trả về True trong thế giới CPython, nhưng điều đó không làm cho nó là một ý tưởng tốt). – PaulMcG

Trả lời

14

L[:] (ký hiệu cắt lát) có nghĩa là: Tạo bản sao của toàn bộ danh sách, phần tử theo phần tử.

Vì vậy, bạn có hai danh sách có nội dung giống hệt nhau, nhưng là các thực thể riêng biệt. Vì is đánh giá nhận dạng đối tượng, nó trả về False.

L == L[:] trả về True.

6

Khi nghi ngờ xin id;)

>>> li = [1,2,4] 
>>> id(li) 
18686240 
>>> id(li[:]) 
18644144 
>>> 
2

Các getslice phương pháp của danh sách, được gọi là khi bạn L [], trả về một danh sách; vì vậy, khi bạn gọi nó với đối số ':', nó không hoạt động khác, nó trả về một danh sách mới với các phần tử giống với bản gốc.

>>> id(L) 
>>> id(L[:]) 
>>> L[:] == L 
True 
>>> L[:] is L 
False 
Các vấn đề liên quan