Maison > développement back-end > Tutoriel Python > Pourquoi la multiplication de liste crée-t-elle des sous-listes partagées en Python ?

Pourquoi la multiplication de liste crée-t-elle des sous-listes partagées en Python ?

Mary-Kate Olsen
Libérer: 2024-12-23 12:55:10
original
990 Les gens l'ont consulté

Why Does List Multiplication Create Shared Sublists in Python?

Changements inattendus dans les listes de listes

Lors de la création d'une liste de listes à l'aide de la multiplication de listes, soyez prudent face aux changements inattendus.

Description du problème

Création d'une liste de listes avec une simple multiplication de liste, comme :

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

peut entraîner des conséquences inattendues. La modification d'une valeur dans une sous-liste affecte toutes les sous-listes :

xs[0][0] = 5
print(xs)
# [[5, 1, 1, 1], [5, 1, 1, 1], [5, 1, 1, 1]]
Copier après la connexion

Explication

L'opérateur de multiplication opère sur des objets, pas sur des expressions. Ainsi, [[1] * 4] * 3 ne voit la sous-liste évaluée [1, 1, 1, 1] que trois fois. Au lieu de créer de nouvelles sous-listes, crée des références à celle existante.

Solution

Pour éviter ce comportement et garantir des sous-listes indépendantes, utilisez une compréhension de liste :

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

Cette expression réévalue [1] * 4 pour chaque itération, ce qui donne des résultats distincts sous-listes.

Compréhension plus approfondie : les entiers immuables

Il est important de noter que les entiers en Python sont immuables. Cela signifie que des opérations telles que :

1.value = 2
Copier après la connexion

ne sont pas valides, car les entiers n'ont pas d'attribut de valeur modifiable. Par conséquent, même si [1] * 4 ne copie pas les entiers eux-mêmes, cela n'a pas d'importance car les entiers ne peuvent pas être modifiés.

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