Python内存限制

-1 投票
2 回答
1376 浏览
提问于 2025-04-17 13:13

我想生成一个如下的列表:

L = list(itertools.product('...', repeat=8))

这个调用

itertools.product(...)

大约会生成 1'099'511'627'776 个长度为 8 的元素(我知道这个数字很大),但我的系统有 12Gbit 的内存,所以这应该没问题吧?

是否可能每个进程都有一个限制?我用

ulimit -a 

检查过,

max memory size

的设置是无限制的...

2 个回答

0

一个一个处理数据应该没问题,但把它们全部收集起来可能会有点麻烦。

如果你有

prod = itertools.product('...', repeat=8)

你可以用下面的方式来逐个遍历这个对象:

for item in prod:
    # process item and drop it afterwards

这样做只会占用必要的内存。

但是如果用

L = list(prod)

那么所有的对象都会被一次性取出来、使用并放进列表里。这可能会耗费不少时间……

4

1,099,511,627,776 乘以 8 等于 8 太字节。8 太字节大于 12 吉字节。

你可以考虑直接使用迭代器来处理这些数据,而不是把所有数据都强行计算出来并存储在一个列表里。

当然,处理 1 万亿个元素的任何复杂操作可能会花费很长时间。

撰写回答