为什么这种矩阵初始化会给我带来意想不到的结果?

时间:2019-01-14 04:58:25

标签: python

当我以以下方式初始化二维矩阵时,这种行为对我来说很奇怪。

...

我现在知道我应该以以下方式初始化它,以避免这种奇怪的行为:

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

有人可以解释为什么在前一种情况下,我得到的值在多个数组中重复并且对这种行为有好处吗?

1 个答案:

答案 0 :(得分:0)

这是因为值都是相同的对象,id,所以您需要这样做:

matrix = [[None] * 2 for i in range(3)]

一个range就足够了,id现在会有所不同。

它不起作用的原因:

matrix变量包含三个相同的项目,完全相同,不仅值相同,而且id也相同,当您使用range时,它们将被一一处理,并非完全相同,因此id会有所不同,但是值仍然相同,因此并非所有值都相同,上述内容确实会引起您的问题,*并不总是最好的,{ {1}}是。

相关问题