Bruno Desthuilliers wrote:
mk a écrit :
Obviously, don't try this on low-memory machine:
a={}
for i in range(10000000):
Note that in Python 2, this will build a list of 10000000 int objects.
You may want to use xrange instead...
Huh? I was under impression that some time after 2.0 range was made to
work "under the covers" like xrange when used in a loop? Or is it 3.0
that does that?
And this build yet another list of 10000000 int objects.
Well this explains much of the overhead.
(overly simplified)
When an object is garbage-collected, the memory is not necessarily
"returned" to the system - and the system doesn't necessarily claim it
back neither until it _really_ needs it.
This avoid a _lot_ of possibly useless work for both the python
interpreter (keeping already allocated memory costs less than immediatly
returning it, just to try and allocate some more memory a couple
instructions later) and the system (ditto - FWIW, how linux handles
memory allocations is somewhat funny, if you ever programmed in C).
Ah! That explains a lot. Thanks to you, I have again expanded my
knowledge of Python!
Hmm I would definitely like to read smth on how CPython handles memory
on Python wiki. Thanks for that doc on wiki on "functions & methods" to
you and John Posner, I'm reading it every day like a bible. ;-)
Regards,
mk
--
http://mail.python.org/mailman/listinfo/python-list