matrix = [[0]*1005]*1005
matrix = [[0 for _ in range(1005)] for _ in range(1005)]
我发现如果我使用前初始阵列,并运行matrix[1][1] = 1
它将每一行中的第二列设置为1,当我希望执行第二。我无法弄清楚为什么?
matrix = [[0]*1005]*1005
matrix = [[0 for _ in range(1005)] for _ in range(1005)]
我发现如果我使用前初始阵列,并运行matrix[1][1] = 1
它将每一行中的第二列设置为1,当我希望执行第二。我无法弄清楚为什么?
[[0] * 1005] * 1005
将创建1005个个引用的数组到1005个零的数组。他们都是一样的参考,所以改变一个会改变所有其他人。您可以缩短你的工作代码这一点,虽然:
matrix = [[0] * 1005 for _ in range(1005)]
这几乎是唯一的警告任何人曾经为您介绍有关名单乘法语法,其实:)
你能给我一个关于python参考的链接吗?其实,它对'[0] * 1005'意味着什么。谢谢。 –
@ user674199:http://docs.python.org/library/stdtypes.html#typesseq。见s * n:“n个连续的浅拷贝”。 – Ryan
由于整数是不可变的,因此'[0] * 1005'可以。 –
只是对什么已经扩大被所述
a = [[0]] * 5
print a # [[0], [0], [0], [0], [0]]
a[0][0] = 1
print a # [[1], [1], [1], [1], [1]]
[在Python“最小惊讶”:易变默认参数]的
可能重复(http://stackoverflow.com/questions/1132941/least-astonishment-in-python-the-mutable-default -argument) –
糟糕。这不是我想要选择的问题。 –