置换字符列表会占用我所有的内存(Python)

rda*_*mon 1 python

我正在建立一个包含所有字母和数字的字典.这段代码的问题是"在第二件事中消耗了100%的记忆".你觉得我的实施不好吗?任何帮助表示赞赏.

from timeit import Timer
from itertools import permutations
dictionary = []
small_alpha = map(chr, range(97,123))

lookup.append(small_alpha)

def test():
    for i in permutations(lookup, 10):
        dictionary.append(''.join(i))

if __name__ == '__main__':
    test()
Run Code Online (Sandbox Code Playgroud)

(已编辑)我受过良好教育.没有黑客的意图.即使我有100台机器,这实际上也是不可能的.没人能计算这么大的数字.只是在某种程度上可以尝试

ken*_*ytm 10

有36个!/(36-10)!= 1022个字母数字字符的922,393,263,052,800个排列(~1千万亿).当然这会占用你所有的记忆.

假设每个字符串需要32个字节来存储(指针为8个字节,长度为8个字节,内容为16个字节*,在64位机器上),这需要26.2 PiB的内存.

无法在普通机器中存储所有排列.请说明你真正想做的事情.

(*:实际上它需要更多,因为还有类型信息,而在Python 3.xa字符中,UTF-16需要2个字节,而列表本身也需要内存.)


即使只有字母表,排列的数量仍然是19,275,223,968,000(~20万亿),并且每串32字节仍需要561 TiB的内存.