J'ai écrit ce code:
[] [] [[]] [0] [[0]] [[0], [0]] [0, 1] [[0, 1], [0, 1]] [[0, 1], [0, 1], [0, 1]]
Je m'attendais à ce qu'il soit imprimé:
[] [] [[]] [0] [[]] [[],0] [0,1] [[],0] [[],0,[0,1]]
Mais à la place, il a imprimé:
XXX
Je ne comprends pas pourquoi lst change ses membres en actuels.
3 Réponses :
au lieu de cette ligne lst.append (current) , allez avec ceci:
from copy import copy lst.append(copy(current))
Ce problème est que lorsque vous ajoutez current code > au lst ça a l'air bien, mais dans l'itération suivante lorsque vous changez de courant et l'ajoutez à nouveau, cela changera le courant précédent que vous avez déjà ajouté. c'est pourquoi vous voyez deux [0] et trois [0, 1]
jetez un œil à Ce lien pour plus de précisions.
À lire également Ce lien aura des effets positifs sur ce qu'est la copie et les types de copies.
sauf si vous effectuez une copie ou copie profonde , chaque élément de lst pointera sur current < pre> XXX
affichera le résultat souhaité
Copie superficielle
Une copie superficielle construit un nouvel objet composé puis (au dans la mesure du possible) y insère des références aux objets trouvés dans l'original.
lst.append (current [:]) # shallow-copyfonctionne à la fois en Python 2 et 3.
lst = [] current= [] for i in range(3): print(current) print(lst) lst.append(current[:]) # shallow-copy print(lst) current.append(i)