python - 大型列表初始化失败
问题描述
我正在尝试初始化一个任意长列表,但是我这样做的方式会默默地失败。编码:
a_long_list = [True] * (1000000011)
我试图尝试/捕获异常但没有成功。理想情况下,如果初始化成功会很好,但最重要的是检测是否失败。环境:我使用的是python 3.8.5,不幸的是numpy在这个环境中不可用我也尝试了数组但没有成功(也默默地失败了)。
a_long_list = array.array('b', (1,)*1000000011)
解决方案
您尝试使用array.array
的首先是创建tuple
与您的内存使用量相等的内存使用量list
,因此峰值内存使用量仍然太高。array
将由 short制成的 short相乘tuple
,而不是tuple
:
a_long_list = array.array('b', (1,)) * 1000000011
array.array
然后将有效地生成更长的数组,完全使用内存高效的 C 级类型(每个元素只占用一个字节,而不是指针,通常每个元素 4-8 个字节;如果你开始分配超出范围的值,则更多的小int
缓存)没有你不使用的大量临时文件。
推荐阅读
- android - 列出从 Playstore 安装的应用程序
- python - 即使条件不满足,Python也会执行While循环?
- r - 如何使用 summarise 获取对应于最大值的变量的值。另一个变量的值?
- recursion - 方案 - 2 个列表的较大列表及其总和
- git - 在提交消息之前添加部分分支名称
- react-native - 如何在 react-native-swiper 中使用 currentIndex 渲染 Swiper
- php - 日期时间字段为空或超过 1 天的 Wordpress ACF 查询帖子
- wordpress - 禁用除管理员以外的用户编辑页面标题
- resize - 自动保存用户的编辑器大小
- kubernetes - ADO:验证数据时出错:服务器找不到请求的