2010-03-16 10 views
6

Questo è il codice:lista Python non è la stessa di riferimento

L=[1,2] 

L is L[:] 

False 

Perché questo è falso?

+0

Prova questo, potrebbe essere penetranti troppo: 'L [:] è L [:]' ' – fortran

+0

Reserve is' test per la verifica nei confronti Nessuno o altri single (come le classi o moduli), in caso contrario, si è molto probabilmente interessato a '==' testing (e sì, so che '1 is 1' generalmente restituisce True nel mondo CPython, ma ciò non lo rende una buona idea). – PaulMcG

risposta

14

L[:] (notazione di sezione) significa: eseguire una copia dell'intero elenco, elemento per elemento.

Quindi hai due elenchi che hanno contenuti identici, ma sono entità separate. Poiché is valuta l'identità dell'oggetto, restituisce False.

L == L[:] restituisce True.

6

In caso di dubbio chiedere id;)

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

Il getslice metodo di lista, che viene chiamata quando si a L [], restituisce una lista; così, quando lo chiami con l'argomento ':', non si comporta diversamente, restituisce una nuova lista con gli stessi elementi dell'originale.

>>> id(L) 
>>> id(L[:]) 
>>> L[:] == L 
True 
>>> L[:] is L 
False 
Problemi correlati