Lorsqu'il s'agit de types spécifiques tels que list et dictionary, les variables font référence à des entités, contrairement aux entités de valeur. Les propriétés des variables peuvent être confirmées à partir des résultats d'exécution des programmes suivants.
l1 = []
l1.append(0)
l2 = l1
l2.append(1)
print('l1 = ' ,l1)
print('l2 = ' ,l2)
Résultat d'exécution
l1 = [0, 1] l2 = [0, 1]
Après avoir remplacé la liste «l1» par la liste «l2», j'ai ajouté une valeur uniquement à «l2», mais une valeur similaire a été ajoutée à «l1». En effet, ce sont les informations de référence qui contiennent à la fois «l1» et «l2» et que les entités à la destination de la référence partagent la même chose.
La méthode copy ()
est utilisée pour résoudre le problème que la valeur elle-même n'est pas copiée simplement en faisant une affectation.
l1 = []
l1.append(0)
l3 = l1.copy()
l3.append(1)
print('l1 = ' ,l1)
print('l3 = ' ,l3)
Résultat d'exécution
l1 = [0] l3 = [0, 1]
Cependant, même si la méthode copy ()
est utilisée, si l'élément de la liste est une référence, la destination de référence n'est pas copiée.
l4 = [[]]
l4[0].append(0)
l5 = l4.copy()
l5[0].append(1)
print('l4 = ' ,l4)
print('l5 = ' ,l5)
Résultat d'exécution
l4 = [[0, 1]] l5 = [[0, 1]]
Si vous souhaitez copier toutes les destinations de référence des éléments inclus dans la liste, utilisez la méthode deepcopy ()
incluse dans le package copy
.
import copy
l4 = [[]]
l4[0].append(0)
l6 = copy.deepcopy(l4)
l6[0].append(1)
print('l4 = ' ,l4)
print('l6 = ' ,l6)
Résultat d'exécution
l4 = [[0]] l6 = [[0, 1]]
Recommended Posts