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

Python向列表追加更新后字典值时仅保留最后一次迭代结果问题

问题原因

  • 代码全局仅初始化了1个dict字典对象,Python中字典属于可变对象,每次调用dict.update()都是修改同一个字典的内容,list.append(dict)追加到列表里的只是该字典的内存引用,不是独立的新字典。所有迭代结束后,列表里的所有引用都指向被最后一次修改后的同一个字典,因此所有元素都仅保留最后一次迭代的取值。
  • 额外注意:不要使用dict、list这类Python内置类型名作为自定义变量名,会覆盖原有内置方法,引发后续不可预知的运行错误。

修复方案

修改load函数逻辑,每次调用时生成新的独立字典追加到列表即可,修复后代码如下:

my_dict = {}
my_list = []
def load(N,P,S):
    # 每次生成全新字典,避免修改同一对象
    new_dict = {"number": N, "param" : P, "state": S}
    my_list.append(new_dict)


k = 3
for i in range(k):
    num = i
    par = num+1
    state = num *10
    load(num,par,state)

j = 4
for i in range(j):
    num = j*2
    par=j+3
    state=j*12
    load(num,par,state)
    
print(my_list)

如果业务需要保留全局字典变量,可在追加时做浅拷贝:

def load(N,P,S):
    my_dict.update({"number": N, "param" : P, "state": S})
    # 追加字典的浅拷贝,而非原字典的引用
    my_list.append(my_dict.copy())

内容的提问来源于stack exchange,提问作者ANKIT SINGH YADAV

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 21:06:00