Two aces up Python's sleeve

Mild Shock janburse at fastmail.fm
Thu Nov 7 19:29:48 EST 2024


For example this article:

https://www.codementor.io/@arpitbhayani/python-caches-integers-16jih595jk

about the integer singletons claims:

 >>> x, y = 257, 257
 >>> id(x) == id(y)
False

But on Windows my recent CPython doesn't do that:

Python 3.14.0a1 (tags/v3.14.0a1:8cdaca8, Oct 15 2024, 20:08:21)
 >>> x, y = 257, 257
 >>> id(x) == id(y)
True

Mild Shock schrieb:
> 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