[Python] Copie d'une liste multidimensionnelle

Comme il m'est difficile de comprendre le comportement de la copie d'une liste multidimensionnelle de Python, je l'ai organisée avec les résultats expérimentaux. En conclusion, copy (), list [:] et copy.copy () dans la bibliothèque de copie sont des copies superficielles, créant une nouvelle liste multidimensionnelle puis l'original. Insérez une référence à la liste trouvée dans la liste. La bibliothèque de copie copy.deepcopy () est une copie profonde qui crée une nouvelle liste multidimensionnelle, puis insère une copie de la liste trouvée dans la liste d'origine.

copy() Je ne sais pas si la "première couche" est meilleure ou la "première dimension" est meilleure ... L'ID est naturellement différent car la copie crée une autre liste multidimensionnelle. Cependant, comme le contenu de la liste est des références, la réécriture de la première couche de la copie n'affecte pas la liste d'origine, mais la réécriture de la deuxième couche et des couches suivantes se propage à l'original même si l'ID est différent.

copy()


lst = [[0]*3 for _ in range(3)]

lst1 = lst.copy()

lst1[1] = ['r'] * 3
print('lst1 = ', lst1)
print('id(lst1) = %d' % id(lst1))
print('lst = ', lst)
print('id(lst) = %d' % id(lst))

lst1[0][1] = 'r'
print('lst1 = ', lst1)
print('id(lst1) = %d' % id(lst1))
print('lst = ', lst)
print('id(lst) = %d' % id(lst))

production


lst1 =  [[0, 0, 0], ['r', 'r', 'r'], [0, 0, 0]]
id(lst1) = 139730947400512
lst =  [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
id(lst) = 139730946890944
lst1 =  [[0, 'r', 0], ['r', 'r', 'r'], [0, 0, 0]]
id(lst1) = 139730947400512
lst =  [[0, 'r', 0], [0, 0, 0], [0, 0, 0]]
id(lst) = 139730946890944

Liste [:]

Identique à copy ().

python:liste[:]


lst = [[0]*3 for _ in range(3)]

lst1 = lst[:]

lst1[1] = ['r'] * 3
print('lst1 = ', lst1)
print('id(lst1) = %d' % id(lst1))
print('lst = ', lst)
print('id(lst) = %d' % id(lst))

lst1[0][1] = 'r'
print('lst1 = ', lst1)
print('id(lst1) = %d' % id(lst1))
print('lst = ', lst)
print('id(lst) = %d' % id(lst))

production


lst1 =  [[0, 0, 0], ['r', 'r', 'r'], [0, 0, 0]]
id(lst1) = 140313735131456
lst =  [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
id(lst) = 140313734622336
lst1 =  [[0, 'r', 0], ['r', 'r', 'r'], [0, 0, 0]]
id(lst1) = 140313735131456
lst =  [[0, 'r', 0], [0, 0, 0], [0, 0, 0]]
id(lst) = 140313734622336

copier la bibliothèque copy.copy ()

Identique à copy ().

copy.copy()


import copy

lst = [[0]*3 for _ in range(3)]

lst1 = copy.copy(lst)

lst1[1] = ['r'] * 3
print('lst1 = ', lst1)
print('id(lst1) = %d' % id(lst1))
print('lst = ', lst)
print('id(lst) = %d' % id(lst))

lst1[0][1] = 'r'
print('lst1 = ', lst1)
print('id(lst1) = %d' % id(lst1))
print('lst = ', lst)
print('id(lst) = %d' % id(lst))

production


lst1 =  [[0, 0, 0], ['r', 'r', 'r'], [0, 0, 0]]
id(lst1) = 139783910001664
lst =  [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
id(lst) = 139783910057280
lst1 =  [[0, 'r', 0], ['r', 'r', 'r'], [0, 0, 0]]
id(lst1) = 139783910001664
lst =  [[0, 'r', 0], [0, 0, 0], [0, 0, 0]]
id(lst) = 139783910057280

copier la bibliothèque copy.deepcopy ()

Étant donné que la copie crée une autre liste multidimensionnelle, l'ID sera différent et le contenu de cette liste sera également copié. Pour ainsi dire, un clone est fait. Le contenu est exactement le même, mais différent, donc la réécriture n'affectera pas l'original.

copy.deepcopy()


import copy

lst = [[0]*3 for _ in range(3)]

lst1 = copy.deepcopy(lst)

lst1[1] = ['r'] * 3
print('lst1 = ', lst1)
print('id(lst1) = %d' % id(lst1))
print('lst = ', lst)
print('id(lst) = %d' % id(lst))

lst1[0][1] = 'r'
print('lst1 = ', lst1)
print('id(lst1) = %d' % id(lst1))
print('lst = ', lst)
print('id(lst) = %d' % id(lst))

production


lst1 =  [[0, 0, 0], ['r', 'r', 'r'], [0, 0, 0]]
id(lst1) = 139629482679488
lst =  [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
id(lst) = 139629482735040
lst1 =  [[0, 'r', 0], ['r', 'r', 'r'], [0, 0, 0]]
id(lst1) = 139629482679488
lst =  [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
id(lst) = 139629482735040

référence

Python - Liste en double copie --- opérations de copie superficielle et de copie profonde [Python] Comment empêcher la liste d'origine d'être modifiée en attribuant une liste à l'argument d'une fonction que vous avez créée

Recommended Posts

[Python] Copie d'une liste multidimensionnelle
Copie de python
Liste des modules python
Copie de plusieurs listes
Copie des préférences python
[Introduction à Udemy Python3 + Application] 19. Copie de la liste
Copiez la liste en Python
Résumé des opérations de liste Python3
Initialisation de tableau multidimensionnel de la liste
[Python] liste
À propos de la liste de base des bases de Python
bases de python: liste
[Python] Chapitre 04-03 Diverses structures de données (liste multidimensionnelle)
Tableau multidimensionnel Python
Les bases de Python ①
Bases de python ①
[python] Obtenir une liste de variables d'instance
Grammaire de base de la série Python3 (liste, tapple)
Résumé des méthodes intégrées, etc. de la liste Python
Résumé de l'utilisation de la liste Python
[Python] Obtenir une liste de dossiers uniquement
Manipulation de liste Python
Introduction de Python
[Introduction à Udemy Python3 + Application] 26. Copie du dictionnaire
[python] Vérifier les éléments de la liste tous, tous
[Python] Trier la liste de pathlib.Path dans l'ordre naturel
[python] Créer une liste de différents types de caractères
Liste des opérations de base de Python3 list, tapple, dictionnaire, set
Liste de code Python à déplacer et à mémoriser
[Python] Opération d'énumération
Python> liste> extend () ou + =
Unification de l'environnement Python
Principes de base du grattage Python
Vitesse de notation d'inclusion de liste en Python
Liste de filtres en Python
[python] comportement d'argmax
liste assertXXX unittest python
Utilisation des locaux Python ()
le zen de Python
Liste des fonctions d'activation (2020)
Installation de Python 3.3 rc1
[Mémo] Tri de liste Python3
Liste des API Python pour OpenCV3
Liste des erreurs Python (japonais)
La chose semblable à une recherche de liste en Python
# 4 [python] Bases des fonctions
Profondeur de la liste imbriquée
Connaissance de base de Python
Anecdotes sobres de python3
Résumé des arguments Python
Affichage des fractions (liste)
Bases de python: sortie
Installation de matplotlib (Python 3.3.2)
Application de Python 3 vars
Liste des classes d'exception Python
Divers traitements de Python
Initialiser la liste avec python
Note d'apprentissage Python de Mayungo: liste d'histoires et de liens
Faire une copie d'un fichier Google Drive à partir de Python
Résumé du tri Python (liste, type de dictionnaire, série, DataFrame)