Steve Holden wrote: > > The memory allocation for integers is optimized. 'Small' integers > > (between -5 and 100 IIRC) are allocated once and reused. The memory for > > larger integers is allocated once and reused whenever possible, so the > > malloc() overhead is negligible. > > The first bit's right, the second bit isn't: > > >>> id(12100) > 4604168 > >>> id(121*100) > 4604204 > >>>
quoting from Objects/intobject.c : Integers are quite normal objects, to make object handling uniform. (Using odd pointers to represent integers would save much space but require extra checks for this special case throughout the code.) Since a typical Python program spends much of its time allocating and deallocating integers, these operations should be very fast. Therefore we use a dedicated allocation scheme with a much lower overhead (in space and time) than straight malloc(): a simple dedicated free list, filled when necessary with memory from malloc(). http://svn.python.org/projects/python/trunk/Objects/intobject.c </F> -- http://mail.python.org/mailman/listinfo/python-list