Two aces up Python's sleeve
Mild Shock
janburse at fastmail.fm
Thu Nov 7 19:47:14 EST 2024
The wiked brain of ChatGPT gives me a lead:
PEP 659
Storing data caches before the bytecode.
Maybe its an effect of constant folding
and constant pooling by the compiler?
Mild Shock schrieb:
>
> 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