Maison > développement back-end > Tutoriel Python > Comment puis-je créer une copie fidèle d'une liste Python pour éviter les modifications involontaires ?

Comment puis-je créer une copie fidèle d'une liste Python pour éviter les modifications involontaires ?

Linda Hamilton
Libérer: 2024-12-21 02:27:09
original
719 Les gens l'ont consulté

How Can I Create a True Copy of a Python List to Avoid Unintentional Modifications?

Clonage de listes pour une affectation inchangée : un guide complet

En Python, l'attribution d'une liste à une nouvelle variable à l'aide de new_list = my_list n'est pas une copie authentique. Au lieu de cela, une référence à la liste d'origine est créée. Par conséquent, les modifications apportées à la nouvelle liste altèrent également la liste d'origine.

Pour éviter ces changements inattendus, il est essentiel de cloner ou de copier la liste. Voici plusieurs approches :

  • Méthode list.copy() intégrée : (Python 3.3 et plus tard)
new_list = old_list.copy()
Copier après la connexion
  • Découpage :
new_list = old_list[:]
Copier après la connexion
  • Liste intégrée() Constructeur :
new_list = list(old_list)
Copier après la connexion
  • Copie générique.copy() :
import copy
new_list = copy.copy(old_list)
Copier après la connexion
  • Generic copy.deepcopy() : (Copies imbriquées éléments)
import copy
new_list = copy.deepcopy(old_list)
Copier après la connexion

Considérons un exemple avec une liste imbriquée et une instance :

class Foo(object):
    def __init__(self, val):
        self.val = val

    def __repr__(self):
        return f'Foo({self.val!r})'

foo = Foo(1)

a = ['foo', foo]
b = a.copy()
c = a[:]
d = list(a)
e = copy.copy(a)
f = copy.deepcopy(a)

a.append('baz')  # Modify original list
foo.val = 5  # Modify nested instance

print(f'original: {a}\nlist.copy(): {b}\nslice: {c}\nlist(): {d}\ncopy: {e}\ndeepcopy: {f}')
Copier après la connexion

Sortie :

original: ['foo', Foo(5), 'baz']
list.copy(): ['foo', Foo(5)]
slice: ['foo', Foo(5)]
list(): ['foo', Foo(5)]
copy: ['foo', Foo(5)]
deepcopy: ['foo', Foo(1)]
Copier après la connexion

Comme vous pouvez le voir, alors que la liste d'origine et l'instance imbriquée ont changé, seule la copie profonde (f) les a copiées avec précision, en préservant les valeurs précédentes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal