Python # À propos de la référence et de la copie

Les variables peuvent ne pas être des valeurs réelles

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.

Copiez l'entité elle-même

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

Python # À propos de la référence et de la copie
À propos de la référence Python
À propos des objets et des classes Python
À propos des variables et des objets Python
Copie superficielle Python et copie profonde
Copie superficielle Python et copie profonde
À propos de Python, len () et randint ()
À propos de Python et des expressions régulières
À propos des opérations Python et OS
À propos de Python sort () et reverse ()
À propos de _ et __
À propos de Python dict et des fonctions triées
À propos de Python et Cython dtype
À propos de Python Pickle (cPickle) et Marshal
[Python] À propos des classes Executor et Future
À propos de Python, à partir et à l'importation, comme
Réputation des livres Python et des livres de référence
À propos des tranches Python
À propos de la notation d'inclusion de python
À propos du type de référence
À propos de Python tqdm.
À propos de python, classe
Copiez le fichier et réécrivez la valeur de la cellule @python
À propos de l'héritage Python
À propos de python, range ()
Copie de python
Une histoire sur Python pop and append
À propos des décorateurs Python
Page de référence Python
[Python] À propos du multi-processus
Parler d'anciennes et de nouvelles classes en Python
Parler des attributs de classe Python et des métaclasses
À propos du comportement de copy, deepcopy et numpy.copy
Pensez aux recherches de priorité de profondeur et de priorité de largeur en Python
À propos de la différence entre "==" et "is" en python
Une histoire sur la modification de Python et l'ajout de fonctions
[python] Compresser et décompresser
À propos de Python for loop
À propos de la classe et de l'instance
À propos des arguments de fonction (python)
Astuces Python et Numpy
[Python] pip et roue
Copie des préférences python
Itérateur et générateur Python
Paquets et modules Python
Intégration Vue-Cli et Python
Ruby, Python et carte
À propos de cumprod et cummax
À propos de Python, pour ~ (plage)
entrée et sortie python
[Python] Mémo sur les erreurs
Python et Ruby se séparent
À propos de l'environnement de développement Python
Python: à propos des arguments de fonction
Python, à propos de la gestion des exceptions
À propos de Python3 ... (objet Ellipsis)
[Python] À propos de l'entrée standard