2017-02-12 2 views
0

Toute aide sera grandement appréciée !!!Problème avec pop() et append()

res = [] 
s = [1,2,3,4,5,6] 
s.pop() 
res.append(s) 
print res 
s.pop()                     
res.append(s) 
print res 

Le code python ci-dessus donne le résultat suivant

[[1, 2, 3, 4, 5]] 
[[1, 2, 3, 4], [1, 2, 3, 4]] 

Je ne comprends pas pourquoi la pop sur l aura une incidence sur res. Je veux dire le résultat d'impression doit être

[[1,2,3,4,5]] 
[[1,2,3,4,5],[1,2,3,4]] 
+0

Vous travaillez avec la même liste * *. Vous avez ajouté 's' à' res' * deux fois *, mais c'est toujours ** la même liste ** –

+0

Avant d'ajouter s à res, j'applique le dernier élément de s. Donc, les deux éléments de res devraient être différents, n'est-ce pas? – n00d1es

Répondre

0

Chaque valeur en Python est une référence (pointeur) à un objet. L'affectation copie toujours la valeur (qui est un pointeur); deux tels pointeurs peuvent ainsi pointer vers le même objet.

Pour obtenir le résultat nécessaire, vous devez copier la liste initiale:

res = [] 
s = [1,2,3,4,5,6] 
s.pop() 
res.append(s[:]) 
print(res) 
s.pop() 
res.append(s[:]) 
print(res) 

La même chose peut être fait en utilisant la fonction list.copy():

... 
res.append(s.copy()) 
... 

La sortie:

[[1, 2, 3, 4, 5]] 
[[1, 2, 3, 4, 5], [1, 2, 3, 4]] 
+0

Merci, @RomanPerekhrest. Maintenant, je comprends. – n00d1es