[Python-Dev] Int FutureWarnings and other 2.4 TODOs (original) (raw)

Tim Peters tim.one at comcast.net
Fri Dec 5 10:50:58 EST 2003


[maybe Thomas Heller]

IIUC, doing range(10000000) in a program somewhere allocates 10 million integers, and these are never freed, they live in the cache forever. Correct?

[Anthony Baxter]

My understanding was that it was only ints between -5 and +100 that were cached forever.

Tiny ints are shared: no matter how many computations return, and data structures hold, the integer 3, they all point to the same integer object.

Space for all ints (tiny or not) is taken from a dedicated freelist, used for ints and nothing but ints. Whenever an int is deallocated, its memory is added to this dedicated freelist. Unlike most dedicated freelists in Python, the int freelist is unbounded in size. So when you do range(10000000), and that list goes away, most of the space for the int objects it held ends up in millions of int objects pushed onto the int freelist. They all stay there until the program shuts down (although they get reused to satisfy requests for new int objects).

floats have a very similar (unbounded and immortal) dedicated freelist, so, e.g., [abs(0.5) for i in xrange(10000000)] reserves space for 10 million float objects forever after (although [0.5 for i in xrange(10000000)] only creates 1 float object -- as is obvious to the most casual observer ).



More information about the Python-Dev mailing list