2014-10-16 32 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 2014-10-16 15:14:13

+0

既然你有'e = d = c',它们都是同一个对象。改变一个你改变另一个...... – dawg 2014-10-16 15:14:45

回答

4

如果您为Python obejct分配一个新名称,它不会被复制但链接。 因此在e=d=c之后他们都指向相同的列表。你改变一个,你改变一切。 为了防止他们分开。

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

或者说,'c,d,e = [],[],[]'。 – 2014-10-16 15:21:41