Estoy trabajando con (listas de) listas de matrices numpy. Como ejemplo básico, considere este fragmento de código:
a = [np.zeros(5)] b = a.copy() b[0] += 1 Aquí, copio una lista de una matriz de a a b . Sin embargo, la matriz en sí no se copia, por lo que:
print(a) print(b) ambos dan [array([1., 1., 1., 1., 1.])] . Si también quiero hacer una copia de la matriz, podría hacer algo como:
b = [arr.copy() for arr in a] y a permanecería sin cambios. Esto funciona bien para una lista simple, pero se vuelve más complicado cuando se trabaja con listas anidadas de arreglos donde el número de arreglos en cada lista no siempre es el mismo.
¿Existe una forma sencilla de copiar una lista de varios niveles y todos los objetos que contiene sin mantener las referencias a los objetos en la lista original? Básicamente, me gustaría evitar los bucles anidados y tratar con el tamaño de cada sublista individual.
Necesitas usar copia profunda.
import numpy as np import copy a = [np.zeros(5)] b = copy.deepcopy(a) b[0] += 1 print(a) print(b)Resultado:
[array([0., 0., 0., 0., 0.])] [array([1., 1., 1., 1., 1.])]