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
Linda Hamiltonoriginal
2024-12-21 02:27:09726parcourir

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()
  • Découpage :
new_list = old_list[:]
  • Liste intégrée() Constructeur :
new_list = list(old_list)
  • Copie générique.copy() :
import copy
new_list = copy.copy(old_list)
  • Generic copy.deepcopy() : (Copies imbriquées éléments)
import copy
new_list = copy.deepcopy(old_list)

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}')

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)]

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!

Déclaration:
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