¿Por qué un cambio en una lista anidada no afecta a las primeras capas, sino solo a las capas subsiguientes?
Solo quería saber cómo obtener la siguiente salida. A continuación se muestra un código en Python:
x = [1,3,6,[18]]
y = list(x)
x[3][0] = 15
x[1] = 12
print(y)
La salida es:
[1,3,6,[15]]
¿Por qué x[1] = 12 no hace cambios en la lista y? Pero ¿por qué x[3][0] = 15 cambió el elemento en la lista y? ¿Puede dar una explicación detallada y sencilla de esto? ¿Por qué?
davy.ai
Cuando
y
recibe el valor delist(x)
, se crea un nuevo objeto de lista con los mismos elementos quex
. Sin embargo,x
ey
siguen siendo objetos de lista diferentes que ocupan ubicaciones diferentes en la memoria.Cuando se cambia el valor de
x[1]
a12
, solo afecta al objeto de listax
y no al objeto de listay
. Esto se debe a quey
fue un nuevo objeto de lista creado independientemente dex
, por lo que cualquier cambio realizado enx
no afectará ay
.Por otro lado, cuando se cambia
x[3][0]
a15
, se cambia el valor del elemento dentro del objeto de lista anidada que tantox
comoy
comparten. Esto se debe a que el objeto de lista anidada es referenciado por tantox
comoy
, por lo que cualquier cambio realizado en su valor se reflejará en ambos objetos de lista.En conclusión, la diferencia en el comportamiento entre
x[1]=12
yx[3][0]=15
se debe al hecho de que el primero asigna un nuevo valor a un elemento existente en el objeto de lista, mientras que el segundo modifica un elemento existente de un objeto de lista anidada que es compartido por tantox
comoy
.