Re: Two aces up Python's sleeve

2024-11-07 Thread Greg Ewing via Python-list

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.


--
Greg
--
https://mail.python.org/mailman/listinfo/python-list


Re: Two aces up Python's sleeve

2024-11-07 Thread dn via Python-list

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
--
https://mail.python.org/mailman/listinfo/python-list