5

我来过这个问题。代码:

>>> values = [0, 1, 2]
>>> values[1] = values
>>> values
[0, [...], 2]

我期望的结果是:

[0, [0, 1, 2], 2]

这是对 python 列表的无限赋值吗?幕后是什么?

谢谢。

4

4 回答 4

6

你有一个递归列表。values[1]是对 的引用values。如果要存储values需要复制的值,最简单的方法是

values[1] = values[:]
于 2013-07-20T14:07:27.273 回答
3

您将与第二个元素相同的列表放入其自身。所以内部列表的第二个元素又是它自己。

您需要复制初始列表以避免递归:

>>> values[1] = values[:]
于 2013-07-20T14:07:15.470 回答
2

你需要复制它:

values[1] = values[:]
于 2013-07-20T14:14:56.073 回答
1
>>> values = [0, 1, 2]
>>> values[1] = values

你说的values[1]values, 也就是[0, 1, 2],values代替 1, 现在values[0, 1, 2],values代替 1, [0, 1, 2],values代替 1, [0, 1, 2],values代替 1, [0, 1, 2],values代替 1, [0, 1, 2],values代替 1 ... 。 …………

于 2013-07-20T14:50:50.183 回答