2011-05-23 29 views
5

Quiero crear una lista de respaldo de otra lista en python. Aquí hay un ejemplo del código.Crear una lista de respaldo en python

x = [1,2,3] 
y = x 
x.pop(0) 

print y 

Sin embargo, esto produce el resultado y = [2,3] cuando quiero que dió [1,2,3]. ¿Cómo voy a hacer que la lista y sea independiente de la lista x?

Respuesta

17

Una expresión común para esto es y = x[:]. Esto hace una copia superficial de x y la almacena en y.

Tenga en cuenta que si x contiene referencias a objetos, y también contendrá referencias a los mismos objetos. Esto puede o no ser lo que quieres. Si no es así, eche un vistazo a copy.deepcopy().

+0

No olvide mencionar que 'l [:]' es una expresión común. – Tom

4

Aquí es una manera de hacerlo:

import copy 

x = [1,2,3] 
y = copy.deepcopy(x) 
x.pop(0) 
print x 
print y 

del docs here

+1

+1 para copiar, porque funciona con otros objetos, no solo con listas. 'copy.copy' haría el trabajo en este caso, sin embargo. –

0

Mientras Aix tiene la respuesta más parsimonioso aquí, para lo completo también se puede hacer esto:

y = list(x) 

Esto forzará la creación de una nueva lista, y deja bastante claro lo que estás tratando de hacer. Probablemente lo haría de esa manera yo mismo. Pero tenga en cuenta que no hace una copia profunda (por lo que todos los elementos son las mismas referencias).

Si quiere asegurarse de que NADA le pase a y, puede convertirlo en una tupla, lo que evitará la eliminación y la adición de elementos. Si quieres hacer eso:

y = tuple(x) 

Como última alternativa se puede hacer esto:

y = [a for a in x] 

Ese es el enfoque de lista por comprensión a la copia (y grande para hacer las transformaciones básicas o filtrado). Entonces, realmente, tienes muchas opciones.