我有一个由
model = [[[[0,0,0,0]]*4]*15]*5
创建的 python 列表,该列表看起来像这样(没有简洁点):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 个零列表(即 model[0 ][0][0][0]),将被更改。我认为没有办法附加文件,但如果有人需要它,我可以发布列表的完整内容。
提前感谢任何能够弄清楚为什么会发生这种情况的人。
编辑:这是嵌套列表索引
的副本当您创建这样的数组数组时:
[[0]]*n
您正在创建一个数组,其中包含对同一数组的 n 个引用。您需要以另一种方式添加新数组。做到这一点的一种方法是使用列表理解,即
[[[ [0,0,0,0] for _ in range(4)] for _ in range(15)] for _ in range(5)]
它确实创建新数组而不是重用引用。