我需要使用一个堆栈来推送和弹出包含2个数字的列表,这些列表在我正在编写的程序中用作XY坐标。这看起来很简单,所以我只是做了
stack = []
使列表我将用作堆栈。现在我创建坐标变量
coord = [0,0]
并将其推入堆栈。
stack.append(coord)
现在,堆栈等于
[[0, 0]]
那是完美的。现在让我们说我向上移动一个,所以我的坐标变量Y值更新如
coord[1] += 1
和coord等于
[0,1]
这很好。可是等等!即使我没有对堆栈列表做任何事情,它现在读取
[[0,1]]
当我希望它保留我发送给它的旧价值时。
[[0,0]]
为什么会发生这种情况,我该怎样做才能实现我想要的目标?
万一它不清楚,我希望堆栈的行为像
>>> stack = []
>>> stack
[]
>>> coord = [0,0]
>>> stack.append(coord)
>>> stack
[[0, 0]]
>>> coord[1] += 1
>>> stack
[[0, 0]]
>>> stack.append(coord)
>>> stack
[[0, 0], [0, 1]]
但这就是它的作用。
>>> stack = []
>>> stack
[]
>>> coord = [0,0]
>>> stack.append(coord)
>>> stack
[[0, 0]]
>>> coord[1] += 1
>>> stack
[[0, 1]]
>>> stack.append(coord)
>>> stack
[[0, 1], [0, 1]]
将coords[1] += 1
更改为coords[1] = coords[1] + 1
无法解决问题,就像here一样。
答案 0 :(得分:3)
您反复向coords
添加相同的stack
引用。当您更改coords
时,stack
的所有元素似乎都会发生变化。
您应该做的是附加coords
的副本:
stack.append(coord[:])
[:]
制作副本。