为何deepcopy()处理pandas.DataFrame时速度极快?
为什么deepcopy处理DataFrame字典时速度这么快?
这背后的核心原因是pandas对象实现了自定义的__deepcopy__方法,完全绕开了Python标准库deepcopy默认的低效逻辑。
先说说普通列表的deepcopy为什么慢
Python自带的deepcopy默认会对对象做递归式逐元素复制。比如你测试的大列表,deepcopy(a)会遍历10^7个元素,逐个完成复制操作——Python层面的循环开销在数据量极大时会被无限放大,这就是它比a.copy()慢几十倍的原因。而a.copy()是列表的浅拷贝,对于存储不可变元素的列表,它直接批量复制底层内存块,效率自然高很多。
DataFrame的deepcopy走了“捷径”
pandas的DataFrame(包括Series等核心结构)自己实现了__deepcopy__方法,当你对DataFrame调用deepcopy时,它根本不会用默认的递归逻辑,而是直接调用DataFrame.copy(deep=True)——这个方法的底层是基于numpy数组的批量内存复制,完全在C/numpy层面完成,避开了Python循环的开销,速度自然快得飞起。
你的两种复制方式本质是一回事
你写的手动深拷贝:
manual_deep_copy = {k: v.copy() for k, v in dict_of_dfs.items()}
和deepcopy(dict_of_dfs)几乎没有区别:
- 字典层面:
deepcopy会创建新字典,和字典推导式的效果一致; - DataFrame层面:
deepcopy调用自定义的__deepcopy__,也就是执行v.copy(deep=True)——而DataFrame.copy()默认参数就是deep=True,所以和你手动调用v.copy()完全等价。
这就是两者速度差不多的原因,都是吃了pandas底层高效复制的红利。
内容的提问来源于stack exchange,提问作者julpw
相关产品推荐
相关产品推荐

