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
相关产品推荐
相关产品推荐

