Mutable numbers
Rocco Moretti
roccomoretti at hotpop.com
Tue Feb 21 10:56:27 EST 2006
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.)
More information about the Python-list
mailing list