2010-03-16 9 views
6

Este es el código:lista de Python no es la misma referencia

L=[1,2] 

L is L[:] 

False 

Por qué esto es falso?

+0

Prueba esto, podría ser demasiado perspicaz: 'L [:] es L [:]' ' – fortran

+0

Reserva is' prueba para comprobar contra Ninguno u otros embarazos únicos (como clases o módulos), de lo contrario, usted está lo más probable es que esté interesado en la prueba '==' (y sí, sé que '1 es 1' generalmente devuelve True en el mundo de CPython, pero eso no lo convierte en una buena idea). – PaulMcG

Respuesta

14

L[:] (notación de división) significa: Haga una copia de la lista completa, elemento por elemento.

Así que tiene dos listas que tienen el mismo contenido, pero son entidades separadas. Como is evalúa la identidad del objeto, devuelve False.

L == L[:] devuelve True.

6

En caso de duda pregunte por id;)

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

El getslice método de la lista, que se llama cuando a L [], devuelve una lista; entonces, cuando lo llamas con el argumento ':', no se comporta de manera diferente, devuelve una nueva lista con los mismos elementos que el original.

>>> id(L) 
>>> id(L[:]) 
>>> L[:] == L 
True 
>>> L[:] is L 
False 
Cuestiones relacionadas