首页 > 解决方案 > 大型列表初始化失败

问题描述

我正在尝试初始化一个任意长列表,但是我这样做的方式会默默地失败。编码:

a_long_list = [True] * (1000000011)

我试图尝试/捕获异常但没有成功。理想情况下,如果初始化成功会很好,但最重要的是检测是否失败。环境:我使用的是python 3.8.5,不幸的是numpy在这个环境中不可用我也尝试了数组但没有成功(也默默地失败了)。

a_long_list = array.array('b', (1,)*1000000011)

标签: python

解决方案


您尝试使用array.array的首先是创建tuple与您的内存使用量相等的内存使用量list,因此峰值内存使用量仍然太高。array将由 short制成的 short相乘tuple,而不是tuple

a_long_list = array.array('b', (1,)) * 1000000011

array.array然后将有效地生成更长的数组,完全使用内存高效的 C 级类型(每个元素只占用一个字节,而不是指针,通常每个元素 4-8 个字节;如果你开始分配超出范围的值,则更多的小int缓存)没有你不使用的大量临时文件。


推荐阅读