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

Python列表中字典update()导致所有字典同步更新的问题排查

问题根源:重复引用同一个字典对象

你遇到的问题和update()方法无关,问题出在列表的创建方式上:

当执行test = [{}] * 3时,Python并没有生成3个独立的空字典,而是先创建一个空字典,再让列表的三个元素都指向这个字典的内存地址——说白了,列表里的三个位置存的都是同一个字典的引用。

所以循环里每次调用test[i].update(...),都是在修改同一个字典。循环结束后,列表里的三个元素自然都显示最后一次修改的结果。

解决办法

要创建包含独立字典的列表,用以下两种方式:

方式1:列表推导式(推荐)

test = [{} for _ in range(3)]

for i in range(3):
    test[i].update({'test': i, 'val': i+1})
print(test)

列表推导式会在每次迭代时新建一个空字典,确保每个元素都是独立对象。

方式2:逐个添加字典

test = []
for _ in range(3):
    test.append({})

for i in range(3):
    test[i].update({'test': i, 'val': i+1})
print(test)

这种方式也能保证每个字典都是全新的,不会出现引用重复。

验证引用重复的小技巧

用id()函数查看元素的内存地址,就能直观确认:

# 原创建方式的地址(三个完全相同)
test = [{}] *3
print(id(test[0]), id(test[1]), id(test[2]))

# 列表推导式创建的地址(三个各不相同)
test = [{} for _ in range(3)]
print(id(test[0]), id(test[1]), id(test[2]))

内容的提问来源于stack exchange,提问作者Mark Wong

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 09:15:07