Lists, tuples and memory.

Elbert Lev elbertlev at hotmail.com
Fri Jul 16 09:54:40 EDT 2004


Andrew MacIntyre <andymac at bullseye.apana.org.au> wrote in message news:<mailman.465.1089940443.5135.python-list at python.org>...
> On Fri, 15 Jul 2004, Elbert Lev wrote:
> 
> {...}
> 
> > But then I decieded to compare this pieces:
> >
> > t = tuple(file("D:\\CommonDictionary.txt"))        # 1
> > lstdict = map(lambda x: x.lower().strip(), t)      # 2
> >
> > lstdict = map(lambda x: x.lower().strip(),
> > file("D:\\CommonDictionary.txt")) # 3
> >
> > As expected, after line 2 memory was 5550K, but after line 3 it jumped
> > to 7996K!!!
> >
> > The question:
> >
> > If refference counting is used, why the second assignment to lstdict
> > (line 3) did not free the memory alocated by the first one (line 2)
> > and reuse it?
> >
> > So one more experiment:
> >
> > t = tuple(file("D:\\CommonDictionary.txt"))        # 1
> > lstdict = map(lambda x: x.lower().strip(), t)      # 2
> > del lstdict                                        # 3
> > lstdict = map(lambda x: x.lower().strip(),
> > file("D:\\CommonDictionary.txt")) # 4
> >
> > In this case executing line 4 did not add memory!
> 
> The reason the memory is not released without the explicit del is that the
> reference count of the original object is not adjusted until the
> rebinding of "lstdict" takes place, which is after the new object is fully
> constructed.  The del in your experiment forces this adjustment.

Thanks!

This is what I wanted to know.



More information about the Python-list mailing list