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
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