Short answer:
range
creates a list, so if you dorange(1, 10000000)
it creates a list in memory with 9999999 elements. This will become an expensive operation on very large ranges.xrange
is a sequence object that evaluates lazily(it will only compute the next value when needed).
For performance, especially when you’re iterating over a large range, xrange() is usually better. However, there are still a few cases why you might prefer range()
:
- In python 3,
range()
does whatxrange()
used to do andxrange()
does not exist. If you want to write code that will run on both Python 2 and Python 3, you can’t usexrange()
. range()
can actually be faster in some cases - eg. if iterating over the same sequence multiple times.xrange()
has to reconstruct the integer object every time, butrange()
will have real integer objects. (It will always perform worse in terms of memory however)xrange()
isn’t usable in all cases where a real list is needed. For instance, it doesn’t support slices, or any list methods.
References: