【问题标题】:Python list unwantedly updating appended lists [duplicate]Python列表不必要地更新附加列表[重复]
【发布时间】:2015-02-24 05:56:27
【问题描述】:

我需要使用堆栈来推送和弹出包含 2 个数字的列表,这些数字在我正在制作的程序中用作 XY 坐标。看起来很简单,所以我就这样做了

stack = []

制作我将用作堆栈的列表。现在我使坐标变量

coord = [0,0]

并将其压入堆栈。

stack.append(coord)

现在,堆栈等于

[[0, 0]]

这是完美的。现在假设我向上移动了一个,所以我的坐标变量 Y 值更新为

coord[1] += 1

坐标等于

[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 一样。

【问题讨论】:

标签: python stack


【解决方案1】:

您反复将相同的coords 引用附加到stack。当您更改 coords 时,stack 的所有元素似乎都发生了变化。

你应该做的是附加一个coords副本

stack.append(coord[:])

[:] 进行复制。

【讨论】:

    猜你喜欢
    • 2019-03-16
    • 1970-01-01
    • 1970-01-01
    • 2015-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-08
    • 1970-01-01
    相关资源
    最近更新 更多