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

Reply via email to