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

为何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)几乎没有区别:

  1. 字典层面:deepcopy会创建新字典,和字典推导式的效果一致;
  2. DataFrame层面:deepcopy调用自定义的__deepcopy__,也就是执行v.copy(deep=True)——而DataFrame.copy()默认参数就是deep=True,所以和你手动调用v.copy()完全等价。

这就是两者速度差不多的原因,都是吃了pandas底层高效复制的红利。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 19:15:01