python内存限制

时间:2013-01-16 10:53:12

标签: python memory

我想生成以下列表:

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

电话

itertools.product(...)

生成大约1'099'511'627'776个长度为8的元素(我知道它的数字很大)但我的系统有12Gbit RAM因此它应该不是问题吗?

每个流程都有可能存在限制吗?我检查了

ulimit -a 

max memory size

设置为无限...

2 个答案:

答案 0 :(得分:3)

1,099,511,627,776 * 8是8太字节。 8太字节> 12千兆字节。

您可以考虑直接使用迭代器处理它,而不必强制将其全部评估并存储在列表中。

当然,任何非平凡的处理1万亿元素可能需要很长时间。

答案 1 :(得分:0)

一个接一个地处理数据应该不是问题,但收集它们可能是一个问题。

如果你有

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

您可以使用

迭代此对象
for item in prod:
    # process item and drop it afterwards

只会消耗所需的内存量。  但是

L = list(prod)

将获取并使用所有对象并将其放入列表中。这可能相当冗长......