首页 > 解决方案 > 更新列表内的列表也会影响其他子列表,有人可以解释这种行为吗?

问题描述

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

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]]

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

标签: pythonpython-3.xlist

解决方案


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


推荐阅读