gpt4 book ai didi

python - 更改数组数组中的值似乎会更改下一个数组中的相应值

转载 作者:太空宇宙 更新时间:2023-11-03 18:15:05 25 4
gpt4 key购买 nike

我正在制作一个基本的贪吃蛇游戏并遇到了这个问题。我完全不知道为什么会发生这种情况,这是代码。

self._body 是数组的数组,如下所示:

[[15, 20], [16, 20], [17, 20]]

此代码的目标是将其变为:

[[14, 20], [15, 20], [16, 20]]

看起来很简单吧?这是问题代码,注意打印语句的位置:

        if move == 'w' or move == 'W' :
print(self._body)
for i in range(len(self._body)-1,0,-1):
self._body[i] = self._body[i-1]
print(self._body)
self._body[0][0] -= 1
print(self._body)

这段代码的输出是:

[[15, 20], [16, 20], [17, 20]]
[[15, 20], [15, 20], [16, 20]]
[[14, 20], [14, 20], [16, 20]]

直到最后一句话都是正确的。

由于某种原因,

 self._body[0][0] -= 1

同时更改

self._body[0][0]

self._body[1][0]

我一生都无法弄清楚为什么。即使我可以解决这个问题,我仍然很想知道为什么会发生这种情况。

非常感谢!

最佳答案

问题是这样的:

self._body[i] = self._body[i-1]

不会复制右侧列表。它将完全相同的列表对象分配给两个变量。因此,如果你改变一个,你就会改变另一个。您需要复制该列表,如下所示:

self._body[i] = list(self._body[i-1])

这让很多人感到困惑。请记住,您必须显式复制列表。

关于python - 更改数组数组中的值似乎会更改下一个数组中的相应值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25146849/

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