"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Por qué las listas se vinculan entre sí cuando se usa [[]] * n en la inicialización de listas de Python?

¿Por qué las listas se vinculan entre sí cuando se usa [[]] * n en la inicialización de listas de Python?

Publicado el 2024-11-05
Navegar:116

Why Do Lists Linked Together When Using [[]] * n in Python List Initialization?

Problema de vinculación de listas en la inicialización de listas con [[]] * n

Al inicializar una lista de listas usando [[]] n, los programadores suelen encontrarse con un problema inesperado en el que las listas parecen estar vinculadas entre sí. Esto ocurre porque la sintaxis [x]n crea múltiples referencias al mismo objeto de lista subyacente, en lugar de crear instancias de lista distintas.

Para ilustrar el problema, considere el siguiente código:

x = [[]] * 3
x[1].append(0)
print(x)

El resultado de este código es:

[[0], [0], [0]]

En lugar del resultado esperado:

[[], [0], []]

El problema surge del hecho de que cada elemento de la lista es una referencia al mismo objeto de la lista. Cuando se modifica uno de los elementos, todos los demás elementos se ven afectados.

Para crear una lista de listas verdaderamente distintas, el enfoque correcto es utilizar la comprensión de listas:

x = [[] for i in range(3)]

Esta sintaxis crea un nuevo objeto de lista para cada elemento de la lista, asegurando que sean independientes.

El siguiente código sirve como demostración:

In [20]: x = [[]] * 4

In [21]: [id(i) for i in x]
Out[21]: [164363948, 164363948, 164363948, 164363948] # same id()'s for each list,i.e same object


In [22]: x=[[] for i in range(4)]

In [23]: [id(i) for i in x]
Out[23]: [164382060, 164364140, 164363628, 164381292] #different id(), i.e unique objects this time
Declaración de liberación Este artículo se reimprime en: 1729212379 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3