Python内存限制
我想生成一个如下的列表:
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 万亿个元素的任何复杂操作可能会花费很长时间。