Steve Holden wrote: > fraca7 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 > >>> >
FWIW, I read "whenever possible" not as "whenever theoretically possible" but as "whenever the (comparatively simple) interpreter recognizes that reuse is possible". >>> a = 12100 >>> b = 12100 >>> a is b False >>> def f(): a = 12100 b = 12100 c = 121*100 print a is b print a is c >>> f() True False >>> The interpreter, when compiling the function, can recognize that the two constants are identical, and makes them the same object. On the interactive interpreter, or after a computation, the interpreter doesn't bother to check to see if it already has the same value integer object. (It could, but the overhead would likely swamp any savings.) -- http://mail.python.org/mailman/listinfo/python-list