2014-10-16 7 views
-2

Это странно, это часть моего моего кода:Python печататься переменной несовпадение

def vert(vert): 

     c=[] 

     #print b 
     for i in range(3): 
       c.append(list(vert[i])) 
     e=d=c 
     s=[] 
     print c 
     by={0: (1,),1: (0,2),2: (1,)} 
     boolean=False 
     for i in range(3): 
      for j in range(3): 
       if c[i][j]==0: 
        boolean=True 
        print i,j 
        for k in by[j]: 
         d[i][j],d[i][k]=d[i][k],d[i][j] 
         print d 
         s+=d 
         d[i][j],d[i][k]=d[i][k],d[i][j] 
        for l in by[i]: 
         e[i][j],e[l][j]=e[l][j],e[i][j] 
         print e 
         s+=e 
         e[i][j],e[l][j]=e[l][j],e[i][j] 
        break; 
      if boolean : 
       print s 
       break; 


vert(vertices[0]) 

выход:

[[8, 1, 0], [5, 2, 6], [7, 3, 4]] 
0 2 
[[8, 0, 1], [5, 2, 6], [7, 3, 4]]          #d 
[[8, 1, 6], [5, 2, 0], [7, 3, 4]]          #e 
[[8, 1, 0], [5, 2, 6], [7, 3, 4], [8, 1, 0], [5, 2, 6], [7, 3, 4]] #s 

Это то, что я не думаю, что должно произойти, я добавьте e и d в s, и они добавлены в другой форме, в которой я не хочу, может ли кто-нибудь увидеть, что происходит? Я хочу, чтобы e и d были в форме, которую они печатали. Но я не мог понять, как добавить их в s в правильной форме.

+3

'e = d = c' ** ** не создает копии, он присваивает * тот же объект списка * всем трем именам. – jonrsharpe

+0

Поскольку у вас есть 'e = d = c', это все тот же объект. Измените один, который вы измените другим ... – dawg

ответ

4

Если вы присваиваете новое имя объекту Python, он не копируется, а связывается. Итак, после e=d=c все они указывают на тот же список. Это вы меняете, вы меняете все. Чтобы предотвратить их синтаксис.

e = [] 
d = [] 
c = [] 
+2

или, скорее, 'c, d, e = [], [], []'. –

Смежные вопросы