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

64位Windows下存储70000×70000嵌套列表所需RAM测算方法

64位Windows下该嵌套列表内存测算方法

首先明确:你代码里生成的不是空列表,np.empty()只是创建值未初始化的numpy数组,调用.tolist()后得到的是两层嵌套Python列表,内层共49亿个元素,每个元素是Python float对象,内存开销非常大。


理论值估算(基于官方64位CPython环境)

64位CPython的内置对象内存开销是固定的:

  • 单个列表基础元数据占40字节,列表内每个存储的指针占8字节
  • 单个Python float对象占24字节(无额外动态存储开销)

按结构逐部分计算:

  1. 外层列表共1个,长度70000:开销约0.54MB,占比极低可忽略
  2. 内层列表共70000个,每个长度70000:单个内层列表开销为40B + 70000*8B = 560040B,所有内层列表总开销约36.76GB
  3. 内层存储的float对象共70000*70000=4.9*10^9个,总开销约117.6GB

三者相加总理论内存需求约154GB。


实际精准测算方法

不要直接运行全量代码测试,会直接触发内存溢出,用小样本等比缩放测算即可:
sys.getsizeof()默认只会统计对象本身的元数据开销,不会递归统计子列表、内部元素的内存,需要写递归统计函数:

import sys
import numpy as np

def calc_total_size(obj):
    total = sys.getsizeof(obj)
    if isinstance(obj, list):
        for item in obj:
            total += calc_total_size(item)
    return total

# 用小尺寸样本测试,比如100*100的同结构列表
test_shape = (100, 100)
test_list = np.empty(test_shape).tolist()
unit_size = calc_total_size(test_list) / (test_shape[0] * test_shape[1])
# 等比放大到目标尺寸
total_ram = unit_size * 70000 * 70000
print(f"预估所需内存:{total_ram / 1024**3:.2f} GB")

测算注意事项

  • 测试时必须使用和正式运行完全一致的Python版本、numpy版本,不同版本的内置对象内存布局、转换逻辑可能有细微差异,结果会有小幅偏差
  • 实际运行时要额外预留15%20%的内存冗余:Python内存分配器会预留部分内存池空间,Windows系统本身也会占用35GB基础内存,不要卡着测算值配置硬件。

优化提示

转成Python列表的内存效率极低,如果你只是需要存储70000*70000的浮点矩阵,直接保留numpy数组格式存储即可:float64类型的numpy数组每个元素仅占8字节,总内存仅需约36.5GB,比Python列表省75%以上的内存;如果精度允许,用float32类型存储总内存可进一步降到18GB左右,完全没必要调用.tolist()平白消耗上百GB内存。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 18:48:19