Maison >développement back-end >Tutoriel Python >Comment puis-je créer une copie immuable d'une liste en Python ?

Comment puis-je créer une copie immuable d'une liste en Python ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-24 03:37:14810parcourir

How Can I Create an Immutable Copy of a List in Python?

Création d'une copie de liste immuable

En Python, lors de l'attribution de références de liste comme new_list = my_list, les modifications apportées à new_list affectent étonnamment my_list. Cela se produit car au lieu de créer une nouvelle liste distincte, Python copie simplement la référence à la liste réelle, ce qui fait que new_list et my_list pointent vers la même liste.

Pour résoudre ce problème et éviter des changements inattendus, il est essentiel de créer une copie fidèle de la liste en utilisant diverses méthodes.

Cloner une liste

Pour obtenir un clone immuable ou une copie superficielle d'une liste, envisagez les options suivantes :

  • Méthode list.copy() (Python 3.3) :
new_list = old_list.copy()
  • Liste Découpage :
new_list = old_list[:]
  • list() Constructeur :
new_list = list(old_list)

Copie approfondie d'une liste

Si vous devez également copier les éléments de la liste, utilisez des copie :

import copy
new_list = copy.deepcopy(old_list)

Exemple

Considérez le code suivant :

import copy

class Foo:
    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)

# edit orignal list and instance 
a.append('baz')
foo.val = 5

print(f'original: {a}\nlist.copy(): {b}\nslice: {c}\nlist(): {d}\ncopy: {e}\ndeepcopy: {f}')

Résultat :

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

Cela montre comment les modifications apportées à la liste d'origine et à ses instances n'affectent que la liste d'origine et non sa copie. versions (b, c, d et f).

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