confused about resizing array in Python
Dongsheng Ruan
ruan at jcmills.com
Sat Feb 3 19:34:19 EST 2007
This seems to be clever to use reference for list.
Is it unique to Python?
How about the traditional programming languages like C, Pascal or C++?
"Roel Schroeven" <rschroev_nospam_ml at fastmail.fm> wrote in message
news:qx9xh.325276$Ko7.6479988 at phobos.telenet-ops.be...
> Dongsheng Ruan schreef:
>> "Roel Schroeven" <rschroev_nospam_ml at fastmail.fm> wrote in message
>> news:vc8xh.325172$Au6.6345787 at phobos.telenet-ops.be...
>>> Ruan schreef:
>>>> Then how about Python's list?
>>>>
>>>> What is done exactly when list.append is executed?
>>>>
>>>> For list, is there another larger list initialized and the contents
>>>> from the old list is copied to it together with the new appended list?
>
>>> I'm not sure, but I think each time the list needs to grow, it doubles
>>> in size. That leaves room to add a number of elements before the
>>> allocated space needs to grow again. It's a frequently used approach,
>>> since it is quite efficient and the memory needed is never double the
>>> amount of memory strictly needed for the elements of the list.
>
> > You mentioned "it doubles in size".
> >
> > Are you saying that a new double sized array is allocated and the
> > contents of the old list is copied there?
> >
> > Then the old list is freed from memory?
> >
> > It seems to be what is called amortized constant.
> >
> > Say the list size is 100, before it is fully used, the append takes
> > O(1) time. But for the 101th element, the time will be O(100+1), and
> > then from then on, it is O(1) again. Like John Machin said in the
> > previous post?
> >
> > But on average, it is O(1). I guess this is the amortized constant.
> > Isn't it?
>
> I think so, more or less, but as I said I'm not entirely sure about how
> Python handles lists.
>
> One thing to keep in mind is that the list (like any other Python data
> structure) doesn't store the objects themselves; it only stores references
> to the objects. If the list needs to be copied, only the references are
> copied; the objects themselves can stay where they are. For small objects
> this doesn't make much difference, but if the objects grow larger it gets
> much more efficient if you only have to move the references around.
>
> --
> If I have been able to see further, it was only because I stood
> on the shoulders of giants. -- Isaac Newton
>
> Roel Schroeven
More information about the Python-list
mailing list