我正在尝试初始化一个任意的长列表,但是我这样做的方式却默默地失败了。代码:a_long_list = [True] * (1000000011)我尝试尝试/捕获异常但没有成功。理想情况下,如果初始化成功就好了,但最重要的是检测初始化是否失败。环境:我使用的是 python 3.8.5,不幸的是 numpy 在这个环境中不可用我也尝试了数组,但没有成功(也默默地失败了)。a_long_list = array.array('b', (1,)*1000000011)
1 回答
婷婷同学_
TA贡献1844条经验 获得超8个赞
您尝试使用的方法array.array
是首先创建tuple
与您的内存使用量相当的内存使用量list
,因此峰值内存使用量仍然太高。array
乘以由 Short 组成的Short tuple
,而不是tuple
:
a_long_list = array.array('b', (1,)) * 1000000011
array.array
然后将有效地生成更长的数组,完全使用内存高效的 C 级类型(每个元素仅占用一个字节,而不是指针,通常每个元素 4-8 个字节;如果您随后开始分配范围之外的值,则更多小int
缓存),没有您不使用的巨大临时缓存。
添加回答
举报
0/150
提交
取消