Advantage of the array module over lists?
Arnaud Delobelle
arnodel at googlemail.com
Sun Mar 16 09:28:19 EDT 2008
Tobiah <toby at tobiah.org> writes:
> I checked out the array module today. It claims that
> arrays are 'efficient'. I figured that this must mean
> that they are faster than lists, but this doesn't seem
> to be the case:
>
> ################ one.py ##############
> import array
>
> a = array.array('i')
>
> for x in xrange(10000000):
> a.append(x)
>
> for x in a:
> a[x] += 1
>
> ################ two.py ##############
> a = []
>
> for x in xrange(10000000):
> a.append(x)
>
> for x in a:
> a[x] += 1
>
> ######################################
>
>
> ktops:toby:pytest> time python one.py; time python two.py
>
> real 0m28.116s
> user 0m17.504s
> sys 0m10.435s
>
> real 0m23.026s
> user 0m13.027s
> sys 0m9.777s
>
>
> Perhaps the only advantage is that they take less memory
> to store a large number of items? It would seem then, that
> 'economical' might have been a better choice of word than
> 'efficient'.
I get an even bigger difference with this test (same as yours, but
using timeit and using an allegedly more efficient way of initialising
the array)
>>> def test(arr, n):
... a = arr(xrange(n))
... for x in a:
... a[x] += 1
...
>>> n = 10000000
>>> import timeit
>>> timeit.Timer('test(list, n)', 'from __main__ import test, n').timeit(1)
2.4988760948181152
>>> from array import array
>>> arr = lambda n: array('i', n)
>>> timeit.Timer('test(arr, n)', 'from __main__ import test, arr, n').timeit(1)
5.7419960498809814
>>>
--
Arnaud
More information about the Python-list
mailing list