更改数组数组中的值,似乎在下一个数组中更改相应的值

时间:2014-08-05 19:31:07

标签: python arrays

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

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]

我不能为我的生活找出原因。即使我可以解决,我仍然真的想知道为什么会这样。

非常感谢你!

1 个答案:

答案 0 :(得分:1)

问题在于:

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

这将制作右侧列表的副本。它会将完全相同的列表对象分配给这两个变量。因此,如果您更改一个,则更改另一个。您需要复制列表,如下所示:

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

这使很多人绊倒了。请记住,您必须明确复制列表。