2010-03-16 4 views
6

Dieser ist der Code:Python-Liste ist nicht der gleiche Bezug

L=[1,2] 

L is L[:] 

False 

Warum ist das falsch?

+0

die Sie interessieren, könnte es auch einsichtig sein: 'L [:] L [:]' – fortran

+0

Reserve 'is' Tests zur Überprüfung gegen Keine oder andere Singletons (wie Klassen oder Module), sonst sind Sie am ehesten interessiert an '==' testing (und ja, ich weiß, '1 ist 1' gibt normalerweise True in der CPython-Welt, aber das macht es nicht eine gute Idee). – PaulMcG

Antwort

14

L[:] (Slice-Notation) bedeutet: Erstellen Sie eine Kopie der gesamten Liste, Element für Element.

Sie haben also zwei Listen, die den gleichen Inhalt haben, aber separate Entitäten sind. Da is Objektidentität auswertet, gibt es False zurück.

L == L[:] gibt True zurück.

6

Im Zweifel für id fragen;)

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

Die getslice Methode der Liste, die aufgerufen wird, wenn Sie auf L [], um eine Liste zurückgibt; Wenn Sie es also mit dem Argument ':' aufrufen, verhält es sich nicht anders, es gibt eine neue Liste mit den gleichen Elementen wie das Original zurück.

>>> id(L) 
>>> id(L[:]) 
>>> L[:] == L 
True 
>>> L[:] is L 
False 
Verwandte Themen