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
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4