Python: range() 最大大小; 动态还是静态?
我刚开始学Python,所以我像往常一样在做Project Euler的题目,想理清我脑中的逻辑。
简单来说,我需要一个尽可能大的列表,比如说range(1,n),但又不能让程序崩溃。
有没有什么好主意?
2 个回答
0
你的列表大小只受限于你的内存。需要注意的是,根据你使用的Python版本,range(1, 9999999999999999)
只需要几字节的内存,因为它实际上只会创建一个虚拟列表中的单个元素。
如果你想要真正创建这个列表,可以使用 list(range(1,n))
(这样会复制这个虚拟列表)。
8
看看 get_len_of_range 和 get_len_of_range_longs 这两个函数,它们在 内置模块的源代码 中。
简单来说,如果列表里的元素数量超过了可以放进一个有符号长整型的最大值,就会出现 OverflowError 错误。在 32 位的 Python 中,这个最大值是 2**31 - 1
,而在 64 位的 Python 中,这个最大值是 2**63 - 1
。当然,即使是稍微低于这个值,也可能会出现 MemoryError 错误。