Maison > développement back-end > Tutoriel Python > Pourquoi la modification d'une liste imbriquée dans Python affecte-t-elle de manière inattendue toutes les sous-listes ?

Pourquoi la modification d'une liste imbriquée dans Python affecte-t-elle de manière inattendue toutes les sous-listes ?

Linda Hamilton
Libérer: 2025-01-01 11:10:09
original
929 Les gens l'ont consulté

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

Mutations de listes imbriquées : comprendre un comportement inattendu

En Python, les structures de données mutables telles que les listes peuvent se comporter de manière inattendue lorsqu'il s'agit d'imbrication. Prenons l'exemple où une liste de listes est créée :

xs = [[1] * 4] * 3
Copier après la connexion

Cela initialise une structure de liste imbriquée où chaque sous-liste contient quatre éléments définis sur 1. Cependant, en modifiant l'une de ces valeurs les plus internes, comme indiqué ci-dessous :

xs[0][0] = 5
Copier après la connexion

affecte tous les premiers éléments de chaque sous-liste, entraînant :

[[5, 1, 1, 1], [5, 1, 1, 1], [5, 1, 1, 1]]
Copier après la connexion

Cause du comportement inattendu

La racine du problème réside dans la façon dont l'opérateur * fonctionne lorsqu'il est appliqué à des objets. Dans ce cas, la ligne :

[[1] * 4] * 3
Copier après la connexion

crée trois références à la même sous-liste [1] 4, plutôt que de créer trois copies indépendantes. En effet, opère sur le résultat de l'évaluation de l'expression [1] * 4, qui est une seule sous-liste. Par conséquent, toute modification apportée à cette sous-liste unique est reflétée dans toutes les références.

Résoudre le problème

Pour créer des sous-listes indépendantes, il est nécessaire de forcer une évaluation de la [1] * 4 expressions pour chaque sous-liste. Ceci peut être réalisé en utilisant une compréhension de liste, comme vu ci-dessous :

[[1]*4 for _ in range(3)]
Copier après la connexion

Dans ce cas, l'expression [1]*4 est évaluée à chaque fois, ce qui entraîne la création de trois sous-listes distinctes et toute modification à une sous-liste n'affectera que cette sous-liste et pas les autres.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal