先看一个例子,我想改变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)]

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐