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

如何在Python中快速创建无需初始化的超大型原生array数组

问题分析

你当前使用的写法存在两个核心问题:

  1. 存在语法错误,参数里多了一个多余的逗号,修正后的原始写法为 tb = array.array('i', (0,)*2000000)
  2. 性能瓶颈来源于临时元组的开销:(0,)*2000000 会先创建包含200万个Python int对象的临时元组,单个Python int在64位环境下就占28字节,仅该临时元组就需要占用数十MB内存,后续还要逐个把Python int转换为C类型int写入array缓冲区,最后还要销毁临时元组,全程会产生大量额外开销,和你推测的大量malloc/free调用的表现一致。

优化方案

以下方案均基于原生array实现,不需要引入numpy,性能相比原始写法提升几十倍,耗时可压缩到5毫秒以内:

方案1:使用array乘法(最优)

array类型的乘法运算在C层面直接操作内存,不需要创建任何Python级别的临时序列,仅需一次malloc分配整块内存后批量填充值:

import array
tb = array.array('i', (0,)) * 2000000

方案2:使用resize方法

先创建空array,直接调用resize方法扩容到指定长度,新增空间自动初始化为0:

import array
tb = array.array('i')
tb.resize(2000000)

方案3:使用frombytes批量导入

32位int单元素占4字节,200万元素共需8000000字节,直接生成对应长度的空字节串后导入:

import array
tb = array.array('i')
tb.frombytes(b'\x00' * 8000000)

原理说明

上述所有方案均规避了Python层面的对象创建开销,直接在C扩展层完成大块连续内存的分配和初始化,仅产生1次malloc调用,没有额外的临时对象创建和回收开销,完全适配超大型原生array的创建需求。如果你的场景使用无符号32位字,把类型码'i'替换为'I'即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 19:36:04