0

我有一个 python 列表,由 创建model = [[[[0,0,0,0]]*4]*15]*5,它是一个看起来像这样的列表(没有简短的点)model = [[[[0,0,0,0],...[0,0,0,0]]...[[0,0,0,0],...[0,0,0,0]]]...[[[0,0,0,0],...[0,0,0,0]]...[[0,0,0,0],...[0,0,0,0]]]]:问题是,当我尝试使用将其中一个零设置为其他值时

def setLED(model,boardid,chipid,tankid,ledid,value): model[boardid][chipid][tankid][ledid]=value

每个 4 个零的列表都设置相同。即,如果我尝试使用 setLED(model,0,0,0,0,255),则每个 4 个零列表中的第一个值将是 255。预期结果是只有第一个 4 个零列表,(即模型 [0 ][0][0][0]),将被更改。我认为没有办法附加文件,但如果有人需要,我可以发布列表的全部内容。

提前感谢任何能够弄清楚为什么会发生这种情况的人。

编辑:这是嵌套列表索引的副本

4

1 回答 1

3

当您创建这样的数组数组时:

[[0]]*n

您正在创建一个数组,其中包含对同一数组的 n 个引用。您需要以另一种方式添加新数组。一种方法是使用列表推导,即

[[[ [0,0,0,0] for _ in range(4)] for _ in range(15)] for _ in range(5)]

它确实创建了新数组而不是重用引用。

于 2013-06-07T03:30:06.080 回答