python - 更新列表内的列表也会影响其他子列表,有人可以解释这种行为吗?
问题描述
我正在尝试创建列表列表,并且只想通过索引来更新特定的子列表,但是当我尝试通过以下方法进行操作时,所有其他子列表也会得到更新。
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)]
推荐阅读
- php - 从表内的文本框中获取值并使用 JQuery 将其存储为变量
- java - 加载 img 失败时,Itextpdf 会减少新页面中的内容
- vba - PowerPoint ActiveX 文本框和标签在演示过程中分成两部分
- javascript - Bootstrap4 导航选项卡更改页面而不是更改选项卡内容
- linux - 顶部可能的录制中断
- go - Redigo:如何使用 Golang 从 Redis 获取键值映射?
- swift - 使用 SwiftUI 中活动 TextField 中的值更新非活动 TextField
- c++ - C++ 中的 PowerShell
- python - 我可以将多处理与客户 Tweepy StreamListner 类一起使用吗?
- spring - Spring Data JPA:如何对 RDS Aurora PostgreSQL 实例之间的读取查询进行负载平衡?