Two aces up Python's sleeve
Mild Shock
janburse at fastmail.fm
Thu Nov 7 19:25:52 EST 2024
Hi,
In Java its possible to work this way
with the Integer datatype, just call
Integer.valueOf().
I am not sure whether CPython does the
same. Because it shows me the same behaviour
for small integers that are more than
only in the range -128 to 128. You can try yourself:
Python 3.14.0a1 (tags/v3.14.0a1:8cdaca8, Oct 15 2024, 20:08:21)
>>> x,y = 10**10, 10**9*10
>>> id(x) == id(y)
True
Maybe the idea that objects have an address
that can be accessed via id() has been abandoned.
This is already seen in PyPy. So maybe we
are falsly assuming that id() gives na object address.
Greg Ewing schrieb:
> On 8/11/24 3:04 am, Mild Shock wrote:
>> This only works for small integers. I guess
>> this is because tagged pointers are used
>> nowadays ?
>
> No, it's because integers in a certain small range are cached. Not sure
> what the actual range is nowadays, it used to be something like -5 to
> 256 I think.
>
> BTW you have to be careful testing this, because the compiler sometimes
> does constant folding, so you need to be sure it's actually computing
> the numbers at run time.
>
More information about the Python-list
mailing list