gpt4 book ai didi

python - 为什么这个矩阵初始化给了我意想不到的结果?

转载 作者:太空宇宙 更新时间:2023-11-03 21:21:52 26 4
gpt4 key购买 nike

当我按照以下方式初始化二维矩阵时,行为对我来说非常奇怪。

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

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

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

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

最佳答案

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

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

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

不起作用的原因:

matrix变量包含三个相同的项,完全相同,当您使用range时,不仅值相同,id也相同,它们将被一一处理,而不是全部处理,因此 id 会有所不同,但值仍然相同,因此并非全部相同,提到的内容确实导致了您的问题,* 并不总是最好的,range 才是最好的。

关于python - 为什么这个矩阵初始化给了我意想不到的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54175979/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com