Quelle est la meilleure façon de copier une liste? Je connais les façons suivantes, laquelle est la meilleure? Ou existe-t-il un autre moyen?
lst = ['one', 2, 3]
lst1 = list(lst)
lst2 = lst[:]
import copy
lst3 = copy.copy(lst)
Quelle est la meilleure façon de copier une liste? Je connais les façons suivantes, laquelle est la meilleure? Ou existe-t-il un autre moyen?
lst = ['one', 2, 3]
lst1 = list(lst)
lst2 = lst[:]
import copy
lst3 = copy.copy(lst)
J'utilise souvent:
lst2 = lst1 * 1
Si lst1 il contient d'autres récipients (à l'instar d'autres listes de), vous devez utiliser la propriétédeepcopy à partir de la copie lib comme indiqué par la Marque.
Mise à JOUR: Expliquer propriétédeepcopy
>>> a = range(5)
>>> b = a*1
>>> a,b
([0, 1, 2, 3, 4], [0, 1, 2, 3, 4])
>>> a[2] = 55
>>> a,b
([0, 1, 55, 3, 4], [0, 1, 2, 3, 4])
Comme vous pouvez le voir seulement changé... Je vais essayer maintenant avec une liste de listes
>>>
>>> a = [range(i,i+3) for i in range(3)]
>>> a
[[0, 1, 2], [1, 2, 3], [2, 3, 4]]
>>> b = a*1
>>> a,b
([[0, 1, 2], [1, 2, 3], [2, 3, 4]], [[0, 1, 2], [1, 2, 3], [2, 3, 4]])
Pas si lisible, permettez-moi de l'imprimer avec une pour:
>>> for i in (a,b): print i
[[0, 1, 2], [1, 2, 3], [2, 3, 4]]
[[0, 1, 2], [1, 2, 3], [2, 3, 4]]
>>> a[1].append('appended')
>>> for i in (a,b): print i
[[0, 1, 2], [1, 2, 3, 'appended'], [2, 3, 4]]
[[0, 1, 2], [1, 2, 3, 'appended'], [2, 3, 4]]
Le voyez-vous? Il annexée à la b[1] aussi, donc b[1] et a[1] est le même objet. Maintenant, essayez avec propriétédeepcopy
>>> from copy import deepcopy
>>> b = deepcopy(a)
>>> a[0].append('again...')
>>> for i in (a,b): print i
[[0, 1, 2, 'again...'], [1, 2, 3, 'appended'], [2, 3, 4]]
[[0, 1, 2], [1, 2, 3, 'appended'], [2, 3, 4]]
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.