2015-12-11 1 views
1
foo = [1, 2, 3] 
foo[:][0] = 5 

foo ne change pas, aussi:liste Python tranche comme copie peu profonde

import copy 
foo = [1, 2, 3] 
boo = copy.copy(foo) 
boo[0] = 5 

Encore une fois, foo[0] reste le même.

Pourquoi? La copie superficielle crée une nouvelle liste, mais ne devrait pas boo[0]/boo[1]/boo[2] pointer vers les mêmes objets que foo[0]/foo[1]/foo[2]?

+0

Vous êtes en train de réattribuer ce qui est stocké à la position 0 dans votre copie, pourquoi cela changerait-il l'original? – timgeb

+3

Je ne pense pas que la question qui a été marquée en double est vraiment un doublon. Cette question ne demande pas comment faire une copie d'une liste, c'est demander pourquoi une copie d'une liste ne fonctionne pas comme le demandeur l'attend. – BrenBarn

+0

connexes http://stackoverflow.com/questions/3485475/can-i-create-a-view-on-a-python-list – wim

Répondre

3

boo[0] indique le même objet que foo[0]. Mais faire boo[0] = 5 ne modifie pas l'objet visé par boo[0]; il modifie l'objet référencé par boo.

L'affectation à un élément d'une liste modifie la liste en modifiant ce que cet élément "pointe sur". Cela n'a aucun effet sur l'objet pointé.