2017-01-26 4 views
3

Je suis confronté à des problèmes avec les variables de mon programme. J'ai besoin de garder deux ou trois versions d'une liste qui change pendant l'évaluation de la boucle. Par exemple:Comment créer une liste immuable en Python?

x=[0] 
y=[0] 
while True: 
     y=x 
     x[0]+=1 
     print (y,x)  
     input() 

Comme je presse Entrez il montre [1] [1]; [2] [2]; [3] [3]... mais je dois garder l'état précédent de la liste dans une variable: [0] [1]; [1] [2]; [2] [3] ...

Que doit faire le code soit?

+3

@Idos Cela répond le titre, mais pas vraiment la question. – glibdud

Répondre

2

Vous devez copier la valeur au lieu de la référence, vous pouvez faire:

y=x[:] 

lieu

y = x 

Vous pouvez également utiliser la copie lib:

import copy 
new_list = copy.copy(old_list) 

Si la liste contient des objets et vous voulez les copier aussi, utilisez le fichier générique copy.deepcopy()

new_list = copy.deepcopy(old_list) 

3.x python vous pouvez faire:

newlist = old_list.copy() 

Vous pouvez le faire en mode laid aussi bien :)

new_list = list(''.join(my_list)) 
+0

Dans mon cas particulier dans un vrai programme avec des listes imbriquées, seul deepcopy() a fait la différence. Comme: y = deepcopy (x). – user7433465

5

En fait, vous n'avez pas besoin d'une liste immuable. Qu'est-ce que vous avez vraiment besoin est de créer réel copie de la liste au lieu de simplement copier des références. Je pense donc que la réponse à votre question est:

y = list(x) 

Au lieu de y = x.