Reputation: 7916
I'm quite new to python, so I'm doing my usual of going through Project Euler to work out the logical kinks in my head.
Basically, I need the largest list size possible, ie range(1,n), without overflowing.
Any ideas?
Upvotes: 6
Views: 19025
Reputation: 95596
Look at get_len_of_range and get_len_of_range_longs in the builtin module source
Summary: You'll get an OverflowError if the list has more elements than can be fit into a signed long. On 32bit Python that's 2**31 - 1
, and on 64 bit Python that's 2**63 - 1
. Of course, you will get a MemoryError even for values just under that.
Upvotes: 8
Reputation: 328764
The size of your lists is only limited by your memory. Note that, depending on your version of Python, range(1, 9999999999999999)
needs only a few bytes of RAM since it always only creates a single element of the virtual list it returns.
If you want to instantiate the list, use list(range(1,n))
(this will copy the virtual list).
Upvotes: 0