Copiez la liste en Python

introduction

Le résultat de l'exécution avec Python 3.8.3.

Copie de la liste

Parfois, je veux faire une copie de la liste, changer les valeurs et la comparer à l'original. Dans ce cas, vous devez écrire en utilisant la méthode deepcopy du module de copie comme suit.

Liste unidimensionnelle

Lorsque la liste est unidimensionnelle, vous pouvez la copier avec deepcopy (), slice, list (), etc.

list_copy_example_1.py


import copy
list_1 = [0,1,2]
list_2 = copy.deepcopy(list_1) #deepcopy()utilisation
list_3 = list_1[:] #Découpez la liste d'origine
list_4 = list(list_1) #list()utilisation

list_2[0] = 1000
list_3[0] = 2000
list_4[0] = 3000
print(list_1)
print(list_2)
print(list_3)
print(list_4)

La sortie ressemble à ceci.

[0, 1, 2]
[1000, 1, 2]
[2000, 1, 2]
[3000, 1, 2]

Liste 2D

Si la liste est bidimensionnelle (ou supérieure), vous pouvez la copier avec deepcopy (). Le découpage et list () ne fonctionnent pas (voir ci-dessous).

list_copy_example_2.py


import copy
list_1 = [[0,1,2], [3,4,5]]
list_2 = copy.deepcopy(list_1)

list_2[0][0] = 1000
print(list_1)
print(list_2)

La sortie ressemble à ceci.

[[0, 1, 2], [3, 4, 5]]
[[1000, 1, 2], [3, 4, 5]]

Des modèles qui ne fonctionnent pas

Remplacer par =

Puisque la référence à la liste elle-même est copiée, la valeur de la liste d'origine est également modifiée.

anti_pattern_1.py


#=Remplacer par
list_1 = [0,1,2,3]
list_2 = list_1

list_2[0] = 1000
print(list_1)
print(list_2)

production

[1000, 1, 2, 3]
[1000, 1, 2, 3]

Tranche, copie avec liste ()

L'histoire de la création d'une copie non-pass-by-reference d'une liste Python dit qu'il est facile de copier en tranches, mais c'est ** liste Seulement dans une dimension ** Fonctionne très bien.

Lorsque la liste comporte plus de deux dimensions, elle ressemble à ceci: Cela ne semble pas fonctionner car le passage par référence se produit en cours de route.

anti_pattern_2


#Copiez la liste d'origine en tranches(2D)
list_3 = [[0,1,2], [3,4,5]]
list_4 = list_3[:]

list_4[0][0] = 1000
print(list_3)
print(list_4)

production

[[1000, 1, 2], [3, 4, 5]]
[[1000, 1, 2], [3, 4, 5]]

Vous pouvez également obtenir le même résultat en utilisant la méthode list () au lieu de trancher.

Commentaire

Lorsque vous dupliquez une liste normalement, la référence elle-même est copiée, pas la valeur. C'est ce qu'on appelle une ** copie superficielle **. Inversement, copier uniquement la valeur est appelé ** copie profonde **. En Python, une copie superficielle est appliquée aux objets complexes tels que les listes et les dictionnaires, sauf indication contraire. La raison pour laquelle la liste multidimensionnelle a été passée par référence lors de la copie en tranches est probablement parce que la deuxième copie de dimension à l'intérieur de la tranche était une copie superficielle. Et la méthode copy.deepcopy () est une instruction pour "faire une copie complète". Avec lui, même une copie d'une liste multidimensionnelle fera une copie complète de chaque élément. Voir les opérations officielles de copie --- copie superficielle et copie profonde pour plus d'informations.

Résumé

Tranche pour la liste 1D, list (), copy.deepcopy () Copy.deepcopy () pour les listes multidimensionnelles

Recommended Posts

Copiez la liste en Python
Afficher une liste d'alphabets en Python 3
Obtenez le nombre d'éléments spécifiques dans la liste python
Récupérer l'appelant d'une fonction en Python
Créez un tracé de R semblable à un joyplot avec python
Sortie sous la forme d'un tableau python
Créer un bookmarklet en Python
[Python] Copie d'une liste multidimensionnelle
Recevez une liste des résultats du traitement parallèle en Python avec starmap
Faire une copie d'un fichier Google Drive à partir de Python
[python] Récupère la liste des classes définies dans le module
[Python] Affiche toutes les combinaisons d'éléments de la liste
Regrouper par éléments consécutifs d'une liste en Python
Un mémorandum sur la mise en œuvre des recommandations en Python
Comment passer le résultat de l'exécution d'une commande shell dans une liste en Python
[python] Gérer les fonctions dans une liste
python / Créer un dict à partir d'une liste.
[Python] Faire de la fonction une fonction lambda
À propos de la liste de base des bases de Python
Comment obtenir une liste de fichiers dans le même répertoire avec python
Assurez-vous que tous les éléments de la liste sont les mêmes en Python
[Python] Comment créer une liste de chaînes de caractères caractère par caractère
[Note] Importation de fichiers dans le répertoire parent en Python
Comment obtenir la dernière (dernière) valeur d'une liste en Python
Comment obtenir une liste d'exceptions intégrées pour python
Trouver les valeurs propres d'une vraie matrice symétrique en Python
Comment identifier l'élément avec le plus petit nombre de caractères dans une liste Python?
Copie de python
Comment vérifier en Python si l'un des éléments d'une liste est dans une autre liste
Vérifiez le comportement du destroyer en Python
Ecrire le test dans la docstring python
Prenez la somme logique de List en Python (fonction zip)
Créer un diagramme de relations des modules Python
Changer la liste dans l'instruction for
Exécuter l'interpréteur Python dans le script
Le résultat de l'installation de python sur Anaconda
[python] Obtenir une liste de variables d'instance
[python] [meta] Le type de python est-il un type?
Principes de base pour exécuter NoxPlayer en Python
Résumé des méthodes intégrées, etc. de la liste Python
À la recherche du FizzBuzz le plus rapide en Python
Faisons un calcul de combinaison avec Python
L'histoire du traitement A du blackjack (python)
Obtenir la liste de codes EDINET en Python
[Python] Obtenir une liste de dossiers uniquement
Comment déterminer l'existence d'un élément sélénium en Python
Essayez d'obtenir la liste des fils du bulletin d'information (je n'aime pas) avec Python.
Comment vérifier la taille de la mémoire d'une variable en Python
Lire la sortie standard d'un sous-processus ligne par ligne en Python
Comment vérifier la taille de la mémoire d'un dictionnaire en Python
Une fonction qui mesure le temps de traitement d'une méthode en python
[python] Obtenez le rang des valeurs dans la liste par ordre croissant / décroissant
Obtenez une liste de fichiers dans un dossier avec python sans chemin
[Python] Un programme qui fait pivoter le contenu de la liste vers la gauche
Obtenez le nombre de lecteurs d'articles sur Mendeley en Python
Obtenir la valeur d'une clé spécifique jusqu'à l'index spécifié de la liste de dictionnaires en Python
Une histoire que je voulais faire quand j'ai eu une liste de sessions d'étude avec Python
Comment passer le résultat de l'exécution d'une commande shell dans une liste en Python (version non bloquante)
Liste triée en Python
Faites une liste de "Hobunsha 70th Anniversary Campaign" avec Selenium sur Amazon