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

Python变量重分配内存管理:Numpy/Pandas操作峰值内存是1倍还是2倍

问题解答

1. Numpy数组场景的内存峰值判断

你原来的理解是正确的,该场景内存峰值为2GB。
原因:numpy执行array + 1运算时,默认会生成全新的数组存储计算结果,运算全程都需要读取旧数组的完整数据,因此运算结束、新数组完全生成前,旧数组不会被释放,二者会同时占用内存。直到赋值语句执行完成,旧数组的引用计数归零后才会被回收,峰值自然达到2GB,和垃圾回收的速度无关。

2. Pandas官方示例的理解误区

你误解的核心是没有区分运算对象的体积差异,两个场景的运算逻辑完全不同:

  • 你默认counts.add(...)是两个大体积对象相加,但实际df["name"].value_counts()返回的是name列的唯一值统计结果,体积和原df完全不在一个量级:哪怕单块parquet加载后的df有几GB大,只要name列的唯一值数量只有几千、几万,value_counts返回的Series大小往往只有KB级,和原df体积相比可以忽略。
  • 整个循环过程中,最大的内存占用只有pd.read_parquet(path)加载的单块df的内存,后续的value_counts、累计相加操作涉及的都是极小的统计对象,不会出现两个大体积对象并存的情况,因此内存峰值就是官方描述的「最大单块数据内存 + 小体积累计Series内存」。

如果把pandas示例的逻辑改成两个全量大DataFrame直接相加,内存峰值也会达到2倍单块大对象的体积,和numpy场景的表现一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 20:24:03