Lors de la création d'une liste de listes à l'aide de la multiplication de listes, soyez prudent face aux changements inattendus.
Création d'une liste de listes avec une simple multiplication de liste, comme :
xs = [[1] * 4] * 3
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]]
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.
Pour éviter ce comportement et garantir des sous-listes indépendantes, utilisez une compréhension de liste :
xs = [[1] * 4 for _ in range(3)]
Cette expression réévalue [1] * 4 pour chaque itération, ce qui donne des résultats distincts sous-listes.
Il est important de noter que les entiers en Python sont immuables. Cela signifie que des opérations telles que :
1.value = 2
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!