Comment créer une copie complète d'une liste ?
En Python, l'attribution d'une liste à une nouvelle variable à l'aide de list() ne aboutir à une copie complète. Cela crée simplement une copie superficielle, où les éléments internes font toujours référence à la liste originale. Cela peut conduire à des mutations inattendues.
Par exemple, considérons le code suivant :
E0 = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] for k in range(3): E0_copy = list(E0) E0_copy[k][k] = 0 print(E0) # [[0, 2, 3], [4, 0, 6], [7, 8, 0]]
Dans cet exemple, E0_copy n'est pas une copie complète car list() ne duplique que la liste la plus externe. Les éléments internes pointent toujours vers les mêmes objets dans E0. Lorsque nous modifions E0_copy, ces changements sont également reflétés dans E0.
Pour créer une véritable copie complète, vous devez utiliser la fonction copy.deepcopy(). Cette fonction copie récursivement tous les éléments de la liste, garantissant qu'ils sont complètement indépendants de la liste d'origine.
Voici comment écrire l'exemple précédent en utilisant une copie complète :
import copy E0 = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] for k in range(3): E0_copy = copy.deepcopy(E0) E0_copy[k][k] = 0 print(E0) # [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
Avis qu'après modification de E0_copy, la liste originale E0 reste inchangée. En effet, copy.deepcopy() crée une toute nouvelle liste qui n'est pas liée à l'original.
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!