【发布时间】:2012-03-30 20:30:14
【问题描述】:
我是 python 的新手。请让我知道为什么 stairlist[1][0] = 2 语句在使用 stairlist = [[0,0]] * 8 初始化时会更改所有值。
>>> stairlist = [[0,0]] * 8
>>> stairlist
[[0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0]]
>>> stairlist[1][0] = 2
>>> stairlist
[[2, 0], [2, 0], [2, 0], [2, 0], [2, 0], [2, 0], [2, 0], [2, 0]]
但是当我按照以下方式初始化 stairlist 变量时,它就可以正常工作了。
>>> stairlist = [[1,2],[1,2]]
>>> stairlist
[[1, 2], [1, 2]]
>>> stairlist[1][1] = 3
>>> stairlist
[[1, 2], [1, 3]]
【问题讨论】:
-
看起来
[[0,0]] * 8语法使用别名而不是独立副本。不确定这是否在规范中,或者是实施问题。 -
@jpm:是的,它在规范中。它被称为序列重复。请参阅docs.python.org/library/… note (2),并注意副本被定义为浅副本。
-
@FelixKling 谢谢,我找到了解决方案。实际上,由于题名问题,我很难找到类似的问题。
标签: python