高效将公共字典键值对复制到字典列表并保序,deepcopy是否最优?
结论
从CPU耗时角度来看,使用deepcopy完全不是最高效的实现方式,属于不必要的性能浪费。
原因说明
- 该场景中公共字典的value都是不可变字符串,没有嵌套的可变结构,完全不需要用到深拷贝能力。deepcopy本身会递归遍历对象的所有嵌套结构做校验和复制,会额外产生大量无意义的CPU开销,同等场景下耗时是普通浅拷贝/字典解包的10~30倍。
- Python 3.7及以上版本默认保留字典的插入顺序,只要合并时先放置公共字典的内容,再放置数据字典的内容,就能满足公共字段始终在最前方的要求。
最优实现代码
# 提取公共字典 common_dict = list_common_dictionary[0] # 列表推导式+字典解包合并,C层面实现运算,CPU耗时最低 output_dictionary = [{**common_dict, **item} for item in list_data_dictionary]
如果需要兼容更早的Python版本,也可以用浅拷贝+update的方式实现,性能和字典解包接近:
common_dict = list_common_dictionary[0] output_dictionary = [] for item in list_data_dictionary: new_item = common_dict.copy() new_item.update(item) output_dictionary.append(new_item)
性能对比参考(10万次运算测试)
- 字典解包方案:约12ms
- 浅拷贝+update方案:约15ms
- deepcopy+update方案:约210ms
内容的提问来源于stack exchange,提问作者Hugo_Ludo_38
相关产品推荐
相关产品推荐

