Maison  >  Article  >  développement back-end  >  Pourquoi la modification d'un élément de liste imbriquée affecte-t-elle toutes les sous-listes en Python ?

Pourquoi la modification d'un élément de liste imbriquée affecte-t-elle toutes les sous-listes en Python ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-02 04:34:02261parcourir

Why Does Modifying a Nested List Element Affect All Sublists in Python?

Indices de liste imbriquées

Lorsque vous travaillez avec des listes imbriquées en Python, il est important de comprendre le concept de références de liste et son impact sur les indices de liste. .

Liste des références

Contrairement à de nombreux programmes langages qui transmettent des variables par valeur, Python transmet des listes par référence. Cela signifie que l'attribution d'une liste à une autre variable crée une référence au même objet de liste sous-jacent en mémoire.

Indices de liste imbriqués

Dans le code fourni, le problème se pose de l'utilisation de la multiplication de liste. La ligne some_list = 4 * [(4 * [0])] crée quatre références au même objet de liste, ce qui signifie que les modifications apportées à l'une des sous-listes affecteront les quatre.

Résultats attendus

Les résultats attendus sont :

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

Réels Résultats

Les résultats réels sont :

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

Solution

Pour éviter ce problème, utilisez une boucle pour créer une liste imbriquée sans créer plusieurs références à la même liste. Le code corrigé est :

some_list = [(4 * [0]) for _ in range(4)]

Cette boucle crée quatre listes indépendantes, chacune avec quatre zéros, garantissant que le comportement attendu est atteint.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn