我每个月都有3个值的列表,这些值的初始化如下:
v=[[0.0,0.0,0.0]]*12
在2个嵌套循环中,我想向一个元素添加一个值:
v[month-1][pos] += row[0]
在执行代码month-1 = 8
和pos = 0
的某一时刻。从查询到数据库的row[0]
是1.0
。
奇怪的是,我得到了
[[1.0, 0.0, 0.0], [1.0, 0.0, 0.0], [1.0,....
因此,每个子列表的第一个元素都设置为1.0
。怎么会这样更奇怪的是,如果我调试代码并手动设置值v[8][0]=9
,那么它可以按预期工作。
答案 0 :(得分:1)
执行此操作v=[[0.0,0.0,0.0]]*12
时,您将获得一个包含12个对同一列表的引用的列表,以使用理解来解决该问题:
v = [[0.0,0.0,0.0] for _ in range(12)]
通常不希望这样使用*
来使用可变元素。