Maison >développement back-end >Tutoriel Python >Pourquoi la modification d'une sous-liste affecte-t-elle toutes les sous-listes lors de l'utilisation de la multiplication de liste en Python ?

Pourquoi la modification d'une sous-liste affecte-t-elle toutes les sous-listes lors de l'utilisation de la multiplication de liste en Python ?

DDD
DDDoriginal
2024-12-22 08:24:101005parcourir

Why Does Modifying One Sublist Affect All Sublists When Using List Multiplication in Python?

Modifications de la liste des listes reflétées de manière inattendue dans les sous-listes

En Python, création d'une liste de listes à l'aide de la multiplication de liste, comme dans [[1] 4] 3, aboutit à une situation où les modifications apportées à une sous-liste affectent toutes les sous-listes. Ce comportement est contre-intuitif et peut entraîner des conséquences inattendues.

Explication

Lors de l'utilisation de la multiplication de liste, la nouvelle liste est une référence à la liste d'origine. Lorsque vous modifiez un élément de la nouvelle liste, vous modifiez en réalité l'élément de la liste d'origine qui est référencé par toutes les sous-listes.

Ce comportement inattendu se produit car Python évalue l'opérateur de multiplication avant la compréhension de la liste. . Dans ce cas, [[1] 4] évalue une seule sous-liste et * crée simplement trois références à cette sous-liste.

Solution

Pour éviter ce comportement et créer trois références indépendantes sous-listes, vous pouvez utiliser une compréhension de liste, comme suit :

[[1] * 4 for _ in range(3)]

La compréhension de liste réévalue le [1] * 4 expressions pour chaque sous-liste, ce qui donne trois sous-listes distinctes qui ne sont pas liées.

Comparaison avec la multiplication de liste

Bien que la multiplication de liste soit un moyen pratique de créer des listes avec des éléments répétitifs, elle est importante pour comprendre ses limites. La multiplication de liste opère sur des objets existants sans voir les expressions. Il ne fait pas de copies d'objets mais crée à la place des références à des objets existants.

En revanche, les compréhensions de listes réévaluent les expressions de chaque élément, créant de nouveaux objets si nécessaire. Ce comportement garantit que chaque élément de la liste est indépendant.

Ressources supplémentaires

  • [Comment cloner une liste pour qu'elle ne change pas de manière inattendue après affectation ?](https://stackoverflow.com/questions/19850422/how-do-i-clone-a-list-so-that-it-doesnt-change-unexpectedly-after-assignment)
  • [Comment initialiser un tableau à deux dimensions (liste de listes, si vous n'utilisez pas NumPy) dans Python ?](https://stackoverflow.com/questions/6951326/how-to-initialize-a-two-dimensionnel-array-list-of-lists-if-not-using-numpy-in-pyt)
  • [Liste des magasins de dictionnaires uniquement la dernière valeur ajoutée dans chaque itération](https://stackoverflow.com/questions/10827325/list-of-dictionary-stores-only-last-appended-value-in-every-iteration)

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