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