Python打印变量不匹配
这很奇怪,这是我的一段代码:Python打印变量不匹配,python,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
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中。如果您为Python obejct指定一个新名称,它不会被复制,而是被链接。 所以在
e=d=c
之后,它们都指向同一个列表。如果你改变了一个,你就改变了一切。
为了防止这种情况,请将它们单独初始化
e = []
d = []
c = []
e=d=c
不会创建副本,它会将相同的列表对象分配给所有三个名称。因为您有e=d=c
它们都是相同的对象。改变一个就是改变另一个……或者更确切地说,c,d,e=[],[],[]
。