es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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é?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Cuando y recibe el valor de list(x), se crea un nuevo objeto de lista con los mismos elementos que x. Sin embargo, x e y siguen siendo objetos de lista diferentes que ocupan ubicaciones diferentes en la memoria.

    Cuando se cambia el valor de x[1] a 12, solo afecta al objeto de lista x y no al objeto de lista y. Esto se debe a que y fue un nuevo objeto de lista creado independientemente de x, por lo que cualquier cambio realizado en x no afectará a y.

    Por otro lado, cuando se cambia x[3][0] a 15, se cambia el valor del elemento dentro del objeto de lista anidada que tanto x como y comparten. Esto se debe a que el objeto de lista anidada es referenciado por tanto x como y, 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 y x[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 tanto x como y.

Comments are closed.