先看源代码
start=[[]]*3
for i in range(9):
if i < 3:
start[0].append(1)
elif i < 6:
start[1].append(2)
else:
start[2].append(3)
print(start)
理想的输出为[[1, 1, 1], [2, 2, 2], [3, 3, 3]]
但实际上的输出为[[1, 1, 1, 2, 2, 2, 3, 3, 3], [1, 1, 1, 2, 2, 2, 3, 3, 3], [1, 1, 1, 2, 2, 2, 3, 3, 3]]
ChatGPT给出的解释为“因为 start包含了三个相同的空列表,所以对任意一个空列表进行修改会对所有的空列表进行修改”
它给出的修改意见是将第一行改为如下形式
start=[[] for x in range(3)]
这样会创建出包含三个不同的空列表的列表,这样就可以对每个子列表进行独立操作了。