当我以以下方式初始化二维矩阵时,这种行为对我来说很奇怪。
...
我现在知道我应该以以下方式初始化它,以避免这种奇怪的行为:
In [1]: matrix = [[None] * 2] * 3
In [2]: matrix
Out[2]: [[None, None], [None, None], [None, None]]
In [3]: matrix[0][0] = 5
In [4]: matrix
Out[4]: [[5, None], [5, None], [5, None]]
有人可以解释为什么在前一种情况下,我得到的值在多个数组中重复并且对这种行为有好处吗?
答案 0 :(得分:0)
这是因为值都是相同的对象,id
,所以您需要这样做:
matrix = [[None] * 2 for i in range(3)]
一个range
就足够了,id
现在会有所不同。
它不起作用的原因:
matrix
变量包含三个相同的项目,完全相同,不仅值相同,而且id
也相同,当您使用range
时,它们将被一一处理,并非完全相同,因此id
会有所不同,但是值仍然相同,因此并非所有值都相同,上述内容确实会引起您的问题,*
并不总是最好的,{ {1}}是。