我尝试了两种在Python中构建矩阵的方法。建立之后,它们似乎是相同的。但是,如果我对它们执行相同的操作,它们将变得不同。我不明白发生了什么。看下面的代码。
m = [[0]*3]*3
n = [[0]*3 for i in range(3)]
print("m is:")
print(m)
print("n is:")
print(n)
print("m equals n? {}".format(m == n))
m[0][0] = 1
n[0][0] = 1
print('after operation')
print("m is:")
print(m)
print("n is:")
print(n)
print("m equals n? {}".format(m == n))
输出为:
m is:
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
n is:
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
m equals n? True
after operation
m is:
[[1, 0, 0], [1, 0, 0], [1, 0, 0]]
n is:
[[1, 0, 0], [0, 0, 0], [0, 0, 0]]
m equals n? False
答案 0 :(得分:1)
m
是对同一对象的3个引用,即3对[[0]*3]
的引用,因此,如果更改母版的一部分,则会看到所有引用中的更改... >
在我的机器上,我添加了以下内容:
print(id(m[0]), id(m[1]), id(m[2]))
print(id(n[0]), id(n[1]), id(n[2]))
,输出为:
367335732232 367335732232 367335732232
367336105544 367338477832 367336105224
显示m[0] is m[1] is m[2]
,不同于n[0], n[1], n[2]