Python Interview Questions

Terry Reedy tjreedy at udel.edu
Mon Nov 19 09:27:46 CET 2012


On 11/19/2012 1:01 AM, Ian Kelly wrote:

> than tuple access.  Tuples are as fast as or faster than lists, pretty
> much universally.  They seem to have closed the gap a bit in
> Python 3.3, though, as the following timings show.  For one-shot
> construction, tuples seem to be more efficient for short sequences,
> but then lists win for longer sequences, although not by much.  Of
> course, lists are always going to be much slower if you build them up
> with appends and extends.

Interesting results. But what system (hardware, os). These sorts of 
times tend to vary with the system.
>
> C:\>python -m timeit -s "x = range(10)" "tuple(x)"
> 1000000 loops, best of 3: 0.773 usec per loop
>
> C:\>python -m timeit -s "x = range(10)" "list(x)"
> 1000000 loops, best of 3: 0.879 usec per loop
>
> C:\>python -m timeit -s "x = range(100)" "tuple(x)"
> 100000 loops, best of 3: 2.88 usec per loop
>
> C:\>python -m timeit -s "x = range(100)" "list(x)"
> 100000 loops, best of 3: 2.63 usec per loop
>
> C:\>python -m timeit -s "x = range(1000)" "tuple(x)"
> 10000 loops, best of 3: 37.4 usec per loop
>
> C:\>python -m timeit -s "x = range(1000)" "list(x)"
> 10000 loops, best of 3: 36.2 usec per loop
>
> C:\>python -m timeit -s "x = range(10000)" "tuple(x)"
> 1000 loops, best of 3: 418 usec per loop
>
> C:\>python -m timeit -s "x = range(10000)" "list(x)"
> 1000 loops, best of 3: 410 usec per loop
>
>
> For iteration, tuples are consistently 7-8% faster.
>
>
> C:\>python -m timeit -s "x = tuple(range(10))" "for i in x: pass"
> 1000000 loops, best of 3: 0.467 usec per loop
>
> C:\>python -m timeit -s "x = list(range(10))" "for i in x: pass"
> 1000000 loops, best of 3: 0.498 usec per loop
>
> C:\>python -m timeit -s "x = tuple(range(100))" "for i in x: pass"
> 100000 loops, best of 3: 3.31 usec per loop
>
> C:\>python -m timeit -s "x = list(range(100))" "for i in x: pass"
> 100000 loops, best of 3: 3.56 usec per loop
>
> C:\>python -m timeit -s "x = tuple(range(1000))" "for i in x: pass"
> 10000 loops, best of 3: 31.6 usec per loop
>
> C:\>python -m timeit -s "x = list(range(1000))" "for i in x: pass"
> 10000 loops, best of 3: 34.3 usec per loop
>
> C:\>python -m timeit -s "x = tuple(range(10000))" "for i in x: pass"
> 1000 loops, best of 3: 318 usec per loop
>
> C:\>python -m timeit -s "x = list(range(10000))" "for i in x: pass"
> 1000 loops, best of 3: 341 usec per loop
>
>
> For direct item access, tuples seem to be about 2-3% faster.
>
>
> C:\>python -m timeit -s "import operator as o; x = tuple(range(10)); g
> = o.itemgetter(*range(len(x)))" "g(x)"
> 1000000 loops, best of 3: 0.67 usec per loop
>
> C:\>python -m timeit -s "import operator as o; x = list(range(10)); g
> = o.itemgetter(*range(len(x)))" "g(x)"
> 1000000 loops, best of 3: 0.674 usec per loop
>
> C:\>python -m timeit -s "import operator as o; x = tuple(range(100));
> g = o.itemgetter(*range(len(x)))" "g(x)"
> 100000 loops, best of 3: 4.52 usec per loop
>
> C:\>python -m timeit -s "import operator as o; x = list(range(100)); g
> = o.itemgetter(*range(len(x)))" "g(x)"
> 100000 loops, best of 3: 4.65 usec per loop
>
> C:\>python -m timeit -s "import operator as o; x = tuple(range(1000));
> g = o.itemgetter(*range(len(x)))" "g(x)"
> 10000 loops, best of 3: 43.2 usec per loop
>
> C:\>python -m timeit -s "import operator as o; x = list(range(1000));
> g = o.itemgetter(*range(len(x)))" "g(x)"
> 10000 loops, best of 3: 43.7 usec per loop
>
> C:\>python -m timeit -s "import operator as o; x =
> tuple(range(10000)); g = o.itemgetter(*range(len(x)))" "g(x)"
> 1000 loops, best of 3: 422 usec per loop
>
> C:\>python -m timeit -s "import operator as o; x = list(range(10000));
> g = o.itemgetter(*range(len(x)))" "g(x)"
> 1000 loops, best of 3: 447 usec per loop
>


-- 
Terry Jan Reedy



More information about the Python-list mailing list