2010-07-20 8 views

Répondre

5

Utilisez une notation de tranche.

newlist = oldlist

Cela assignera un deuxième nom à la même liste

newlist = oldlist[:]

Cela reproduira chaque élément de oldlist dans une nouvelle liste complète appelée newlist

5

en plus la notation de tranche mentionnée par Lizard,

y ous pouvez utiliser list()

newlist = list(oldlist) 

ou copier

import copy 
newlist = copy.copy(oldlist) 
2

Les answes par Lizard et gnibbler sont corrects, bien que je voudrais ajouter que tous ces moyens donnent une copie peu profonde, à savoir:

l = [[]] 
l2 = l[:] // or list(l) or copy.copy(l) 
l2[0].append(1) 
assert l[0] == [1] 

Pour une copie en profondeur, vous avez besoin de copy.deepcopy().

7

Regardez le copy module, et notez la différence entre les copies superficielles et profondes:

La différence entre peu profonde et la copie profonde ne concerne que les objets composés (objets qui contiennent d'autres objets, comme des listes ou des instances de classe):

  • a copie superficielle construit un nouvel objet composé et ensuite (dans la mesure du possible) insère des références int o aux objets trouvés dans l'original.

  • Une copie profonde construit un nouvel objet composé puis, récursive, insère des copies en elle des objets trouvés dans l'original.

+4

Notez que cela ne concerne que les conteneurs de données mutables. Une liste de tuples contenant des nombres entiers ne tire aucun bénéfice de copy.deepcopy, contrairement à une liste avec une autre liste. – nmichaels