尝试生成 2exp(40) 矩阵时出现内存问题

Getting memory problem when trying to generate a 2exp(40) matrix

我正在尝试生成所有可能的长度为 40 的二进制数,所以我使用了以下代码:

l = list(itertools.product([0, 1], repeat=40))

但是我遇到进程被终止的内存问题,而且我使用的是具有 64GB RAM 的强大机器,那么这个问题有什么解决方案吗?

您正在尝试生成一个包含 2^40(即超过 1 万亿)个列表的列表,每个列表包含 40 个整数元素。由于 Python int 的长度为 24 个字节,即使使用最基本的假设(不计算列表开销等),这也需要 960 TB 的 RAM。

解决方法是尝试将生成器转换为列表,直接使用生成器:

>>> l = itertools.product([0, 1], repeat=40)
>>> l.next()
(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
>>> l.next()
(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1)
>>> l.next()
(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0)
...

要注意的是你不能做 len(l)(但你已经知道结果了,不是吗?)而且你不能切分它。