为什么这两种构建矩阵的方式不同

时间:2018-08-22 06:15:34

标签: python matrix

我尝试了两种在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

1 个答案:

答案 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]