更新列表中的列表也会影响其他子列表,有人可以解释这种行为吗?



我正在尝试创建一个列表列表,并且只想通过索引来更新特定的子列表,但是当我尝试通过以下方法执行此操作时,所有其他子列表也会更新。

times=[0]*4
shows_times=[]
for i in range(4):
shows_times.append(times)
shows_times[0][0]+=1
shows_times[0][1]+=1
shows_times[0][2]+=1
print(shows_times)

输出:

[[1, 1, 1, 0], [1, 1, 1, 0], [1, 1, 1, 0], [1, 1, 1, 0]]

但是当我使用以下代码时,我得到了所需的输出。

shows_times=[]
for i in range(4):
shows_times.append([0,0,0,0])
shows_times[0][0]+=1
shows_times[0][1]+=1
shows_times[0][2]+=1
print(shows_times)

输出:

[[1, 1, 1, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]

请解释为什么会发生这种行为,这与按值传递或按引用传递或类似的东西有关吗?

列表是一种对象类型。这意味着如果你有一个列表,你可以把它保存到多个变量,但如果你改变一个,它将改变所有变量。如果要使列表具有单独的子列表,可以将其定义为shows_times = [[0 for y in range(4)] for x in range(4)]

最新更新