You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

字典列表键赋值异常:修改单个元素致所有元素同步变更

为什么修改列表中一个字典的键值,所有字典都跟着变?

你遇到的这个问题,核心原因是Python里的字典属于可变对象——你在循环里反复添加的是同一个book字典的引用,而不是每次创建新的字典实例。

咱们拆解一下你的代码逻辑:
不管是用普通循环:

shelves = 2
book = {"id":""}
dictionary_list = []
for counter in range(shelves):
    dictionary_list.append(book)

还是用列表推导式:

dictionary_list = [book for i in range(shelves)]

这两种写法本质完全一致——dictionary_list里的两个元素,其实都指向内存中同一个book字典对象。所以不管你修改dictionary_list[0]["id"]还是dictionary_list[1]["id"],都是在修改同一个字典,自然所有元素的结果都会同步变化。

解决方法:每次循环创建独立的字典实例

要让列表里的每个元素都是互不影响的独立字典,你需要在每次循环时生成新的字典,而不是复用同一个。这里有几种常用写法:

  1. 直接在循环内创建新字典:
shelves = 2
dictionary_list = []
for counter in range(shelves):
    dictionary_list.append({"id":""})  # 每次循环都新建一个字典
  1. 用列表推导式生成独立字典:
shelves = 2
dictionary_list = [{"id":""} for i in range(shelves)]
  1. 如果字典结构复杂,可用copy()方法复制新实例:
shelves = 2
book = {"id":""}
dictionary_list = []
for counter in range(shelves):
    dictionary_list.append(book.copy())  # 复制出全新的字典对象

这样修改其中一个字典的id时,就只会影响对应的元素了:

dictionary_list[0]["id"] = "apple"
dictionary_list[1]["id"] = "orange"
print(dictionary_list)  # 输出 [{"id":"apple"}, {"id":"orange"}]

内容的提问来源于stack exchange,提问作者Aleister Tanek Javas Mraz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 12:27:29