Python: agregue una lista a otra lista y borre la primera lista

Así que esto me dejó perplejo. Estoy trabajando en un código de Python donde creo una lista, la agrego a una lista maestra y borro la primera lista para agregarle más elementos. Cuando borro la primera lista, incluso la lista maestra se borra. Trabajé en un montón de apéndices y borrados de la lista, pero nunca observé esto.

list1 = [] list2 = [] list1 = [1,2,3] list2.append(list1) list1 [1, 2, 3] list2 [[1, 2, 3]] del list1[:] list1 [] list2 [[]] 

Sé que esto sucede con los diccionarios anexos, pero no sabía cómo tratar con las listas. ¿Puede alguien por favor elaborar?

Estoy usando Python2.7

Pasar una list a un método como append es simplemente pasar una referencia a la misma list hace referencia list1 , así que eso es lo que se anexa a list2 . Siguen siendo la misma list , solo referenciada desde dos lugares diferentes.

Si quieres cortar el lazo entre ellos, o bien:

  1. Inserte una copia de list1 , no list1 , por ejemplo, list2.append(list1[:]) , o
  2. Reemplace list1 con una list nueva después de append en lugar de borrar en su lugar, cambiando de del list1[:] a list1 = []

Nota: es poco claro, pero si desea que el contenido de la list1 se agregue a la list2 (por lo tanto, la list2 debe convertirse en [1, 2, 3] no [[1, 2, 3]] con los valores en la list anidada) , desearía llamar a list2.extend(list1) , no append , y en ese caso, no se necesitan copias superficiales; los valores de list1 en ese momento se append individualmente, y no existiría un nuevo vínculo entre list1 y list2 (ya que los valores son int s inmutables; si fueran mutables, por ejemplo, list anidadas, dict s, etc., usted Necesitaría copiarlos para cortar completamente el enlace, por ejemplo, con copy.deepcopy para una estructura anidada compleja).

Así que básicamente esto es lo que hace el código:

Antes de borrar

introduzca la descripción de la imagen aquí

Despues de borrar

introduzca la descripción de la imagen aquí

En resumen, los nombres de ambas listas apuntan al mismo objeto de lista.

fuente de visualización de código