2010-03-29 11 views
19

Hola, quiero copiar una lista 2D, de modo que si modifico 1 lista, la otra no se modifica.Copia de listas 2D en python

Para 1 lista D, acabo de hacer esto:

a = [1,2] 
b = a[:] 

Y ahora si modifico b, a no se modifica.

Pero esto no funciona para la lista 2D:

a = [[1,2],[3,4]] 
b = a[:] 

Si modifico b, a es modificado también.

¿Cómo puedo solucionar esto?

+3

Toda una gran parte del tiempo cuando la gente de usuario anidado listas y la necesidad de copiarlos de esta manera, ellos realmente quieren usar 'numpy'. –

Respuesta

34

Para una solución más general que funciona independientemente del número de dimensiones, utilizar copy.deepcopy():

import copy 
b = copy.deepcopy(a) 
+0

Aunque en la mayoría de los casos, probablemente diría 'from copie la copia profunda de importación' ya que es poco probable que exista un conflicto de nombres, y se ve mejor. ;) – Amber

+1

@Dav, usted hace un punto válido. Prefiero siempre importar módulos para evitar conflictos de nombres en lugar de manejar funciones según cada caso. :) –

+0

Tenga en cuenta que esto también hará una copia profunda de los elementos reales en las listas. – FogleBird

35
b = [x[:] for x in a] 
+4

+1 según corresponda. Personalmente me gusta evitar copy/deepcopy (muy raramente tuve un caso de uso válido para ellos en la vida real, lo mismo puede decirse de una lista con más de 2 dimensiones) – ChristopheD