Python打印变量不匹配

时间:2014-10-16 15:10:40

标签: 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中。

1 个答案:

答案 0 :(得分:4)

如果为Python obejct指定一个新名称,则不会复制它但链接。 所以在e=d=c之后他们都指向同一个列表。你改变一个,你改变一切。 为了防止它们单独使用。

e = []
d = []
c = []