Comment puis-je copier le contenu d'une liste et pas seulement une référence à la liste en Python?listes en python, avec références
Répondre
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
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)
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().
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.
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