443,908 Members | 1,945 Online
Need help? Post your question and get tips & solutions from a community of 443,908 IT Pros & Developers. It's quick & easy.

# Advantage of the array module over lists?

 P: n/a 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:pytesttime 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'. Thanks, Toby -- Posted via a free Usenet account from http://www.teranews.com Mar 14 '08 #1
5 Replies

 P: n/a Tobiah >def test(arr, n): .... a = arr(xrange(n)) .... for x in a: .... a[x] += 1 .... >>n = 10000000import timeittimeit.Timer('test(list, n)', 'from __main__ import test, n').timeit(1) 2.4988760948181152 >>from array import arrayarr = lambda n: array('i', n)timeit.Timer('test(arr, n)', 'from __main__ import test, arr, n').timeit(1) 5.7419960498809814 >>> -- Arnaud Mar 16 '08 #2

 P: n/a Their efficiency is mostly regarding the space. I think they aren't much speed-efficient because they require many conversions from-to Python types. You can gain speed efficiency too (sometimes a LOT), in some situations, using array with Psyco. Another advantage of arrays (better called "vector"s, probably, so the name "array" can replace the "list" name used by the built in) is that they offer you a fixed size representation, so you know what you are working with. You can also take a look at the C version of the BList from cheeseshop, the autor has made them rather efficient for some kinds of operations. Bye, bearophile Mar 16 '08 #3

 P: n/a On 13 Mar, 20:40, Tobiah

 P: n/a sturlamolden schrieb: On 13 Mar, 20:40, Tobiah I checked out the array module today. It claims thatarrays are 'efficient'. I figured that this must meanthat they are faster than lists, but this doesn't seemto be the case:################ one.py ##############import arraya = array.array('i')for x in xrange(10000000): a.append(x) Lists are better optimized for appending to the end. Python lists are implemented as arrays of pointers, with a few empty slots at the end. Arrays are contigous memory buffers. They provide faster read-write access, particularly for chunks of data, but are slower at resizing. I doubt that. AFAIK both arrays and lists are continuous memory-areas, that double (at least to a certain threshold or so) when reaching the capacity limit. lists are of type PyObject* of course, whereas arrays are not, instead they are of their respective primitive type, making them more memory efficient. Diez Mar 16 '08 #5

 P: n/a On Mar 17, 1:49 am, "Diez B. Roggisch" I doubt that. AFAIK both arrays and lists are continuous memory-areas, that double (at least to a certain threshold or so) when reaching the capacity limit. For what it's worth, lists over-allocate by ~1/8, and arrays by ~1/16. (Details in listobject.c:list_resize and arraymodule.c:array_resize.) Mar 28 '08 #6

### This discussion thread is closed

Replies have been disabled for this discussion.