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

Python列表append字典后删除原键导致列表内容变化如何解决

问题根因

Python 中的字典属于可变对象,执行x.append(sample_dict)时,实际是将sample_dict的内存引用追加到列表中,列表内存储的和原变量指向的是同一个字典对象。因此后续修改原字典时,列表中引用的同一对象会同步发生变化,才会出现你遇到的现象。

解决方案

只要在将字典存入列表时,存储字典的独立拷贝即可,根据你的字典结构可以选择两种拷贝方式:

  • 浅拷贝:适用于字典所有值都是不可变对象(数字、字符串、元组等)的场景,你的示例代码符合这个场景,可以直接用字典自带的copy()方法,或者用dict()构造新字典:
def test():
    x = []

    sample_dict = dict(
        x=2,
        b=1,
    )

    # 追加字典的浅拷贝,而不是原对象的引用
    x.append(sample_dict.copy())
    # 等价写法:x.append(dict(sample_dict))

    del sample_dict['x']

    print(x)

test() 
# 输出结果:[{'x': 2, 'b': 1}]
  • 深拷贝:如果字典内部嵌套了列表、字典等可变对象,浅拷贝只会复制第一层结构,嵌套的可变对象还是共用引用,这时候需要用copy模块的deepcopy方法生成完全独立的副本:
import copy
def test():
    x = []
    # 嵌套可变对象的示例
    sample_dict = dict(
        x=[1,2,3],
        b=1,
    )

    x.append(copy.deepcopy(sample_dict))

    del sample_dict['x']
    sample_dict['b'] = 999

    print(x)

test()
# 输出结果:[{'x': [1, 2, 3], 'b': 1}]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 12:15:04