这很奇怪,这是我的代码的一部分:
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中。
答案 0 :(得分:4)
如果为Python obejct指定一个新名称,则不会复制它但链接。
所以在e=d=c
之后他们都指向同一个列表。你改变一个,你改变一切。
为了防止它们单独使用。
e = []
d = []
c = []