Notez que j'ai récemment recherché des copies superficielles et profondes de la liste. (Référence: 8.10. Copy - Copie superficielle et opérations de copie profonde)
Normalement, si vous copiez une liste et changez la valeur d'une liste, la valeur de l'autre liste changera également ~~ (copie superficielle) ~~
PostScript 2017/9/17 J'ai reçu un commentaire. Merci dlpyvim.
Je ne pense pas que l'exemple ci-dessus soit une copie superficielle. Une copie superficielle est copy.copy (). La différence avec copy.deepcopy () est de savoir s'il faut insérer une référence ou copier récursivement si l'objet est à l'intérieur.
>>> l = [1, 2, 3]
>>> l2 = l
>>> l
[1, 2, 3]
>>> l2
[1, 2, 3]
>>> l[2] = 4
>>> l
[1, 2, 4]
>>> l2
[1, 2, 4]
Pour éviter cela, il semble que vous puissiez utiliser la fonction deepcopy () (copie profonde).
>>> l = [1, 2, 3]
>>> import copy
>>> l2 = copy.deepcopy(l)
>>> l
[1, 2, 3]
>>> l2
[1, 2, 3]
>>> l[2] = 4
>>> l
[1, 2, 4]
>>> l2
[1, 2, 3]
Si vous ne faites pas attention à cela lorsque vous créez une liste vide, vous aurez des problèmes car la valeur sera saisie sans autorisation.
>>> empty = [[]] * 5
>>> empty
[[], [], [], [], []]
>>> empty[0].append(1)
>>> empty
[[1], [1], [1], [1], [1]]
Si vous souhaitez créer une telle liste vide bidimensionnelle, vous devez utiliser la notation d'inclusion de liste.
>>> empty = [[] for x in range(5)]
>>> empty
[[], [], [], [], []]
>>> empty[0].append(1)
>>> empty
[[1], [], [], [], []]
Recommended Posts