"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é usar el operador STAR para inicializar una lista de listas causa el enlace?

¿Por qué usar el operador STAR para inicializar una lista de listas causa el enlace?

Publicado el 2025-02-12
Navegar:843

Why Does Using the Star Operator to Initialize a List of Lists Cause Linkage?

¿por qué esto código para inicializar una lista de listas aparentemente vincula las listas?

al intentar inicializar una lista de listas con una longitud específica, usando la sintaxis X = [[]] * n puede dar como resultado un comportamiento inesperado donde las listas parecen estar vinculadas juntas.

este problema surge porque el operador STAR ( *) utilizado en [[]] * N crea una lista de referencias al mismo objeto de lista subyacente. Cuando modifica una de las listas en la secuencia, los cambios se reflejan en todas las otras listas porque todas se refieren al mismo objeto.

Solution

para crear una lista de listas distintas , es importante inicializar cada lista por separado. Esto se puede lograr usando la siguiente sintaxis:

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

En este caso, la comprensión de la lista crea una nueva lista para cada uno iteración del bucle, que resulta en una lista de objetos de lista independientes.

comparación

para ilustrar la diferencia, considere el siguiente código de código:

x = [[]] * 3
x[1].append(0)
print(x)  # Output: [[0], [0], [0]]

En este ejemplo, la lista x contiene tres referencias al mismo objeto de lista, por lo que cualquier modificación realizada a una lista afecta Los otros.

Por otro lado, el siguiente fragmento de código crea una lista de tres listas distintas:

x = [[] for i in range(3)]
x[1].append(0)
print(x)  # Output: [[], [0], []]

Aquí, cada lista en x es un objeto separado, por lo que los cambios realizados en una lista no afectan a los demás.

Declaración de liberación Este artículo se reproduce en: 1729212679 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