Python:Range()最大大小;动态还是静态?

时间:2010-07-14 15:48:23

标签: python overflow range

我对python很新,所以我一直在通过Project Euler来解决我头脑中的逻辑问题。

基本上,我需要尽可能大的列表大小,即范围(1,n),而不会溢出。

有什么想法吗?

2 个答案:

答案 0 :(得分:6)

the builtin module source

中查看get_len_of_range和get_len_of_range_longs

总结:如果列表中的元素多于可以放入有符号长整数的元素,则会出现OverflowError。在32位Python上2**31 - 1,在64位Python上2**63 - 1。当然,即使对于那个值,你也会得到一个MemoryError。

答案 1 :(得分:0)

您的列表大小仅受您的记忆限制。请注意,根据您的Python版本,range(1, 9999999999999999)只需要几个字节的RAM,因为它始终只创建它返回的虚拟列表的单个元素。

如果要实例化列表,请使用list(range(1,n))(这将复制虚拟列表)。