Two aces up Python's sleeve
dn
PythonList at DancesWithMice.info
Thu Nov 7 19:07:48 EST 2024
On 8/11/24 11:15, Greg Ewing via Python-list wrote:
> 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.
Haven't seen the OP. Is the Newsgroup link forwarding to the email-list
correctly?
Integer interning is indeed valid for -5 <= i <= 256
("it works on my machine"! see below)
>>> a = 0; b = 0; c = 0; d = 0
>>> while a is b:
... print( a, b, end=" ", )
... print( c, d, ) if c is d else print()
... a += 1; b += 1; c -= 1; d -= 1
...
0 0 0 0
1 1 -1 -1
2 2 -2 -2
3 3 -3 -3
4 4 -4 -4
5 5 -5 -5
6 6
7 7
8 8
9 9
...
254 254
255 255
256 256
>>>
Be aware that this is implementation-dependent and not guaranteed to
hold forever.
dn ~ python
Python 3.12.7 (main, Oct 1 2024, 00:00:00) [GCC 13.3.1 20240913 (Red
Hat 13.3.1-3)] on linux
Type "help", "copyright", "credits" or "license" for more information.
See also https://docs.python.org/3/library/sys.html#sys.intern
Thus could decide what is interned for yourself:
a_string = sys.intern( str( 1000 ) )
--
Regards,
=dn
More information about the Python-list
mailing list