先看一个例子,我想改变load的子列表中第五个元素,从0.8-1.2分布。
load = [[0, 1, 2, 3, 4, 0, 6]] * 10
# 设置起始值和步长
start = 0.8
der = 0
# 更新每个嵌套列表中的第六个元素
for i in range(10):
load[i][5] = start + der
der += 0.4 / 10
print(load)
输出如下,可以看到每个子列表中的第5个元素相同,并没有实现从0.8-1.2分布。
[[0, 1, 2, 3, 4, 1.1600000000000001, 6], [0, 1, 2, 3, 4, 1.1600000000000001, 6], [0, 1, 2, 3, 4, 1.1600000000000001, 6], [0, 1, 2, 3, 4, 1.1600000000000001, 6], [0, 1, 2, 3, 4, 1.1600000000000001, 6], [0, 1, 2, 3, 4, 1.1600000000000001, 6], [0, 1, 2, 3, 4, 1.1600000000000001, 6], [0, 1, 2, 3, 4, 1.1600000000000001, 6], [0, 1, 2, 3, 4, 1.1600000000000001, 6], [0, 1, 2, 3, 4, 1.1600000000000001, 6]]
问题在这儿:
当你使用
load = [[0, 1, 2, 3, 4, 0, 6]] * 10
的时候,Python实际上复制的是外部列表的引用,而不是内部数组本身。因此,所有的子列表实际上引用的是同一个列表。当你修改了一个子列表的元素时,所有的子列表都会随之改变。因为他们实际上都是同一个子列表的引用。
如果想要实现上述功能,改成这样即可:
load = [[0, 1, 2, 3, 4, 0, 6] for _ in range(10)]