列表中字典赋值异常求助:修改单个字典全列表同步变化
问题分析与解决方法
这不是你的操作有误,而是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
相关产品推荐
相关产品推荐

