2013-02-01 1 views
0

Je ne comprends pas pourquoi mon 3 de y est supprimé dans le code suivant. Je suppose que c'est un problème d'aliasing, mais est-il possible de laisser y conserver le numéro quand x l'a supprimé?Les numéros des deux listes ont-ils été supprimés?

x = [] 
    y = [] 

    for i in range (10): 
     if i == 5: 
      y.append(x) 
      del x[3] 
     x.append(i) 

print (x) 
print (y) 

Sortie:

x = [0, 1, 2, 4, 5, 6, 7, 8, 9] 
y = [[0, 1, 2, 4, 5, 6, 7, 8, 9]] 
+2

Pourriez-vous nous montrer ce que vous attendez de la sortie? Je ne suis pas clair sur ce que vous voulez que le code fasse. – ford

Répondre

1

Vous devrez joindre une copie de x à y:

y.append(x[:]) 

y.append(x) Ajoute la liste qui est référencé par x, donc essentiellement y est [x]. Parce que c'est x qui est contenue par y, et aucune autre liste, vous modifiez la valeur de y lorsque vous modifiez x.

En outre, si x est une liste imbriquée, vous voudrez peut-être envisager de prendre un deepcopy de x comme ceci:

import copy 
y.append(copy.deepcopy(x)) 

Alors que chacune des listes imbriquées sont des copies, et non pas les mêmes listes au x.

+0

Merci beaucoup! Je vous en suis reconnaissant. –

+0

"donc si vous changez x, vous changez la liste en y" fait sonner comme s'il y avait deux listes - qui ne sont pas, comme vous l'expliquez plus tard – goncalopp

Questions connexes