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

Python中打印和向列表追加同一字典变量得到不同值,原因是什么?

问题原因

  • Python中字典属于可变对象,你执行dct[k] = lst[e]时,实际存储的是lst[e]这个字典对象的内存引用,而非独立的副本。
  • 你的循环过程中会不断修改lst[e]本身的键值,所有存入lst2的引用指向的是同一个字典对象,最终打印时所有元素都会显示为最后一次修改后的结果。
  • 第一段代码输出正确是因为你每次生成dct后立刻打印,此时lst[e]还没有被后续循环修改,所以能看到当时的正确值。

修正方案

你只需要在赋值时对字典做一次浅拷贝即可,同时建议不要直接修改原列表的内容,避免原数据被污染,修正后的代码如下:

lst = [{'a' : 1, 'b' : 2, 'c': 3 },{'e' : 1, 'f' : 2, 'g': 3}]
e = 0
lst2 = []
while e < len(lst):
    # 先复制原字典,不修改原数据
    original_dct = lst[e].copy()
    for k in original_dct:
        dct = {}
        x = original_dct[k]
        # 每次计算都用新的副本
        temp_dct = original_dct.copy()
        for key, value in temp_dct.items():
            temp_dct[key] = value - x
        dct[k] = temp_dct
        lst2.append(dct)        
    e += 1
print(lst2)

运行后输出就和你第一段代码打印的预期结果一致了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 11:15:04