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

