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 :
new_list = old_list.copy()
new_list = old_list[:]
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!