*-unpacking
Alex Martelli
aleax at aleax.it
Fri Oct 3 13:22:31 EDT 2003
More information about the Python-list mailing list
Fri Oct 3 13:22:31 EDT 2003
- Previous message (by thread): *-unpacking
- Next message (by thread): *-unpacking
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Michael Hudson wrote: > Alex Martelli <aleax at aleax.it> writes: > >> So -- it's clear to me that I do NOT understand what's going on >> here. If just the ags[:] is 35.2 usec, how can the ags[:].pop(0) >> be 24.5 ... ??? > > How quiet was your machine when you ran the tests? I see behaviour Very, and the numbers were highly repeatable: -- running just now: [alex at lancelot python2.3]$ python timeit.py -s'ags=range(1000)' 'x=ags[:]' 10000 loops, best of 3: 36.9 usec per loop [alex at lancelot python2.3]$ python timeit.py -s'ags=range(1000)' 'x=ags[:]' 10000 loops, best of 3: 35.2 usec per loop [alex at lancelot python2.3]$ python timeit.py -s'ags=range(1000)' 'x=ags[:]' 10000 loops, best of 3: 35.8 usec per loop [alex at lancelot python2.3]$ python timeit.py -s'ags=range(1000)' 'x=ags[:]' 10000 loops, best of 3: 35.6 usec per loop -- and from a copy & paste of the screen as of a while ago: [alex at lancelot python2.3]$ python timeit.py -s'ags=range(1000)' 'x=ags[:].pop(0)' 10000 loops, best of 3: 24.5 usec per loop [alex at lancelot python2.3]$ python timeit.py -s'ags=range(1000)' 'x=ags[:].pop(0)' 10000 loops, best of 3: 24.5 usec per loop -- _however_ -- retrying the latter now: [alex at lancelot python2.3]$ python timeit.py -s'ags=range(1000)' 'x=ags[:].pop(0)' 10000 loops, best of 3: 48.8 usec per loop [alex at lancelot python2.3]$ python timeit.py -s'ags=range(1000)' 'x=ags[:].pop(0)' 10000 loops, best of 3: 46.1 usec per loop [alex at lancelot python2.3]$ python timeit.py -s'ags=range(1000)' 'x=ags[:].pop(0)' 10000 loops, best of 3: 46.5 usec per loop [alex at lancelot python2.3]$ python timeit.py -s'ags=range(1000)' 'x=ags[:].pop(0)' 10000 loops, best of 3: 24.5 usec per loop [alex at lancelot python2.3]$ python timeit.py -s'ags=range(1000)' 'x=ags[:].pop(0)' 10000 loops, best of 3: 24.4 usec per loop [alex at lancelot python2.3]$ python timeit.py -s'ags=range(1000)' 'x=ags[:].pop(0)' 10000 loops, best of 3: 24.5 usec per loop -- _SO_ -- immediately going back to the just-copy tests...: [alex at lancelot python2.3]$ python timeit.py -s'ags=range(1000)' 'x=ags[:]' 100000 loops, best of 3: 19.3 usec per loop [alex at lancelot python2.3]$ python timeit.py -s'ags=range(1000)' 'x=ags[:]' 100000 loops, best of 3: 19.3 usec per loop [alex at lancelot python2.3]$ python timeit.py -s'ags=range(1000)' 'x=ags[:]' 100000 loops, best of 3: 19.3 usec per loop SO -- so much for the "quiet"... clearly there _IS_ something periodically running and distorting the elapsed-time measurements (which are the default here on Linux) by a hefty factor of 2. So much for this kind of casual benchmarking...!-) I guess I've been doing a little too much of it... > more in line with what you'd expect: > > [mwh at pc150 build]$ ./python ../Lib/timeit.py -s'ags=range(1000)' > ['x=ags[:]' > 10000 loops, best of 3: 31.6 usec per loop > [mwh at pc150 build]$ ./python ../Lib/timeit.py -s'ags=range(1000)' > ['x=ags[:].pop(0)' > 10000 loops, best of 3: 39.8 usec per loop Yep, makes more sense. So, moving to the more-stable -c (CPU time, as given by time.clock): [alex at lancelot python2.3]$ python timeit.py -c -s'ags=range(1000)' 'x=ags[:]' 100000 loops, best of 3: 19.2 usec per loop [alex at lancelot python2.3]$ python timeit.py -c -s'ags=range(1000)' 'x=ags[:]' 100000 loops, best of 3: 19.2 usec per loop [alex at lancelot python2.3]$ python timeit.py -c -s'ags=range(1000)' 'x=ags[:]' 100000 loops, best of 3: 19.2 usec per loop [alex at lancelot python2.3]$ python timeit.py -c -s'ags=range(1000)' 'x=ags[:].pop(0)' 10000 loops, best of 3: 24 usec per loop [alex at lancelot python2.3]$ python timeit.py -c -s'ags=range(1000)' 'x=ags[:].pop(0)' 10000 loops, best of 3: 24 usec per loop [alex at lancelot python2.3]$ python timeit.py -c -s'ags=range(1000)' 'x=ags[:].pop(0)' 10000 loops, best of 3: 24 usec per loop [alex at lancelot python2.3]$ python timeit.py -c -s'ags=range(1000)' 'x=ags[:].pop(0)' 10000 loops, best of 3: 23 usec per loop [alex at lancelot python2.3]$ python timeit.py -c -s'ags=range(1000)' 'ags.reverse(); x=ags[:].pop()' 10000 loops, best of 3: 23 usec per loop [alex at lancelot python2.3]$ python timeit.py -c -s'ags=range(1000)' 'ags.reverse(); x=ags[:].pop()' 10000 loops, best of 3: 22 usec per loop [alex at lancelot python2.3]$ python timeit.py -c -s'ags=range(1000)' 'ags.reverse(); x=ags[:].pop()' 10000 loops, best of 3: 23 usec per loop [alex at lancelot python2.3]$ python timeit.py -c -s'ags=range(1000)' 'ags.reverse(); x=ags[:].pop()' 10000 loops, best of 3: 23 usec per loop it WOULD seem to be confirmed that reverse-then-pop() is VERY slightly faster than pop(0) -- 22/23 instead of 23/24 usec for a 1000-long list... of which 19.2 are the apparently-repeatable overhead of copying that list. I still wouldn't say that I "KNOW" this, though -- the margin is SO tiny and uncertain...!!! It seems to scale up linearly going from 1000 to 5000: just the copy, 105-108; ags[:].pop(0), 120-123; reverse then pop, 116-117. This is always with the -c (once burned...). Alex
- Previous message (by thread): *-unpacking
- Next message (by thread): *-unpacking
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-list mailing list