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

Python如何从字典列表选取dict修改且不影响原列表数据

问题解决方法

根因说明

你用到的dict.copy()、列表的copy()都属于浅拷贝,仅会复制最外层的容器结构,容器内部嵌套的可变对象(比如你案例里steps对应的子字典)仍然会和原数据共享引用,因此修改嵌套层的值会同步影响原列表。

解决方案

方案1:使用copy模块的深拷贝方法(通用嵌套结构场景)

直接调用copy.deepcopy会递归复制所有层级的可变对象,生成完全独立的副本,适合嵌套层级多、结构复杂的场景:

import copy

user_input = input('Which dict do you need?')
original_dict = [d for d in dict_list_all if d['name'] == user_input][0]
selected_dict = copy.deepcopy(original_dict)

# 后续修改不会影响原列表
selected_dict['steps']['step_01'] = True

方案2:手动构造副本(已知结构场景,无需导包)

如果你明确知道字典的结构,可以手动拆分嵌套层分别拷贝,不需要引入额外依赖:

user_input = input('Which dict do you need?')
original_dict = [d for d in dict_list_all if d['name'] == user_input][0]
selected_dict = {
    "name": original_dict["name"],
    "steps": original_dict["steps"].copy()
}

为什么之前的尝试无效

你之前对列表做copy后,列表中存储的仍然是原字典的引用,后续对外层字典做浅拷贝也只会复制第一层键值对,steps对应的子字典还是指向原数据的内存地址,所以修改时仍然会影响原列表。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 20:54:02