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

为何空Python列表占用内存比空NumPy数组更少?

为什么空NumPy数组比空Python列表占用更多内存?
  • 底层结构复杂度差异
    Python空列表的底层是轻量的PyListObject结构体,仅需维护元素数量、容量、指针数组起始地址这几项基础元数据,64位系统下固定占用56字节。
    而NumPy的ndarray是一个多组件的C语言包装结构体:它需要存储维度(shape)、步长(strides)、数据类型(dtype)、数据缓冲区指针、引用计数、内存管理标志位等多项信息,这些额外的元数据叠加后,64位系统下空数组的内存占用就达到了112字节。

  • 设计目标的取舍
    NumPy的内存优势体现在存储大量同类型数据的场景:当数组包含成百上千个元素时,它会把数据连续存储在一块内存区域,避免了Python列表中每个元素作为独立对象的额外开销。但空数组场景下,它的结构体固定开销完全暴露,反而比轻量的空列表更占内存。

  • 实际场景对比验证
    当处理批量数据时,NumPy的内存效率优势立刻显现:

    import sys
    import numpy as np
    
    # 包含1000个整数的Python列表
    py_list = list(range(1000))
    # 包含1000个整数的NumPy数组
    np_arr = np.arange(1000)
    
    print(sys.getsizeof(py_list))  # 约8056字节(列表本身开销+1000个int对象的指针)
    print(sys.getsizeof(np_arr))   # 仅8096字节(8*1000字节的整数数据+96字节结构体开销)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 03:43:13