2010-03-16 1 views
6

Это код:список Python не та же ссылка

L=[1,2] 

L is L[:] 

False 

Почему это неверно?

+0

Попробуйте это, может быть проницательным тоже: 'L [:] является L [:]' ' – fortran

+0

Reserve is' тестирования для проверки на None или других одиночек (например, классов или модулей), в противном случае, вы скорее всего, интересуется тестированием '==' (и да, я знаю, что '1 is 1' обычно возвращает True в мире CPython, но это не делает его хорошей идеей). – PaulMcG

ответ

14

L[:] (обозначение фрагмента) означает: Сделайте копию всего списка по элементам.

Итак, у вас есть два списка, которые имеют идентичный контент, но являются отдельными объектами. Поскольку is оценивает идентификатор объекта, он возвращает False.

L == L[:]True.

6

В случае сомнений попросите id;)

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

getslice метод списка, который вызывается, когда вы L [] возвращает список; поэтому, когда вы вызываете его аргументом «:», он не ведет себя по-другому, он возвращает новый список с теми же элементами, что и оригинал.

>>> id(L) 
>>> id(L[:]) 
>>> L[:] == L 
True 
>>> L[:] is L 
False 
Смежные вопросы