I'm missing something here with range vs. xrange

mensanator at aol.com mensanator at aol.com
Fri Dec 7 17:08:32 EST 2007


On Dec 7, 3:08 pm, "Joe Goldthwaite" <j... at goldthwaites.com> wrote:
> Here's the simple benchmark;
>
> start = time.time()
> for x in xrange(3):
>         for y in xrange(10000000):
>                 pass
> print 'xRange %s' % (time.time() - start)
>
> start = time.time()
> for x in range(3):
>         for y in range(10000000):
>                 pass
> print 'Range %s' % (time.time() - start)
>
> Here's what I get;
>
> xRange 92.5529999733
> Range 95.2669999599
>
> Not a lot of difference.  Range is slower but not by much. I know that range
> builds
> a list then iterates through it. I thought that xrange just kept a counter
> that was
> incremented and returned with each call. No list was ever created. If that's
> true
> (and I guess it's not), xrange would be much faster than range. It seems
> almost
> identical. Given the amount of performance difference, I don't see why
> xrange even
> exists.

Try tracking your memory usage during the benchmark and
it will become very clear why xrange exists.

>
> P.S.  I searched google again to try and find out more about range vs.
> xrange and
> this thread came up first on the list.  That was strange.  I thought I'd
> found
> someone else asking the same question as me until I clicked on the link and
> found
> out it actually was me.
>
>
>
> -----Original Message-----
> From: python-list-bounces+joe=goldthwaites.... at python.org
>
> [mailto:python-list-bounces+joe=goldthwaites.... at python.org]On Behalf Of
> Bjoern Schliessmann
> Sent: Thursday, December 06, 2007 3:33 PM
> To: python-l... at python.org
> Subject: Re: I'm missing something here with range vs. xrange
>
> Joe Goldthwaite wrote:
> > I read that the range function builds a list and that xrange
> > returns an iterator and is therefore more efficient.
>
> This is generally not true.
>
> > In my testing, they both come out to almost exactly the same
> > performance wise.  Did something get changed in Python 2.4 to make
> > them identical?
>
> No. Try again with a list of length 10000000.
>
> Regards,
>
> Björn
>
> --
> BOFH excuse #359:
>
> YOU HAVE AN I/O ERROR -> Incompetent Operator error
>
> --http://mail.python.org/mailman/listinfo/python-list- Hide quoted text -
>
> - Show quoted text -




More information about the Python-list mailing list