"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Pourquoi les listes sont-elles liées entre elles lors de l'utilisation de [[]] * n dans l'initialisation de liste Python ?

Pourquoi les listes sont-elles liées entre elles lors de l'utilisation de [[]] * n dans l'initialisation de liste Python ?

Publié le 2024-11-05
Parcourir:283

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

Problème de liaison de liste lors de l'initialisation de liste avec [[]] * n

Lors de l'initialisation d'une liste de listes à l'aide de [[]] n, les programmeurs rencontrent souvent un problème inattendu où les listes semblent être liées entre elles. Cela se produit car la syntaxe [x]n crée plusieurs références au même objet de liste sous-jacent, plutôt que de créer des instances de liste distinctes.

Pour illustrer le problème, considérons le code suivant :

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

La sortie de ce code est :

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

Au lieu de la sortie attendue :

[[], [0], []]

Le problème vient du fait que chaque élément de la liste est une référence au même objet de liste. Lorsqu'un des éléments est modifié, tous les autres éléments sont affectés.

Pour créer une liste de listes vraiment distinctes, la bonne approche consiste à utiliser la compréhension de liste :

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

Cette syntaxe crée un nouvel objet de liste pour chaque élément de la liste, garantissant qu'ils sont indépendants.

Le code suivant sert de démonstration :

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
Déclaration de sortie Cet article est réimprimé à l'adresse : 1729212379. En cas d'infraction, veuillez contacter [email protected] pour le supprimer.
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3