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