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

列表中字典赋值异常求助:修改单个字典全列表同步变化

问题分析与解决方法

这不是你的操作有误,而是Python列表乘法的一个经典陷阱,很多刚接触Python的开发者都踩过这个坑!

问题根源

当你执行lengths = [{"max_len":0,"eq_len":True}] * 7时,Python并没有创建7个独立的字典对象。实际上,这个操作只是把同一个字典的引用重复添加到列表里7次。也就是说,列表里的7个元素指向的是内存中同一个字典实例,所以你修改任何一个元素里的键值对,其他所有元素看起来都会跟着变化——因为它们本质上都是在操作同一个字典。

正确的实现方式

要创建7个独立的字典,你需要在每次迭代时都生成一个新的字典对象,最常用的方法是使用列表推导式:

lengths = [{"max_len": 0, "eq_len": True} for _ in range(7)]

这样,循环的每一次都会创建一个全新的字典,列表里的每个元素都是独立的对象,互相之间不会影响。

验证效果

现在再尝试修改其中一个元素:

lengths[0]["max_len"] = 10
print(lengths)

输出会是:

[{'max_len': 10, 'eq_len': True}, {'max_len': 0, 'eq_len': True}, {'max_len': 0, 'eq_len': True}, {'max_len': 0, 'eq_len': True}, {'max_len': 0, 'eq_len': True}, {'max_len': 0, 'eq_len': True}, {'max_len': 0, 'eq_len': True}]

只有第一个字典的max_len被修改了,其他的都保持初始值,完全符合你的预期。

内容的提问来源于stack exchange,提问作者control-zed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 11:58:11