Path: ...!weretis.net!feeder8.news.weretis.net!reader5.news.weretis.net!news.solani.org!.POSTED!not-for-mail From: Mild Shock Newsgroups: comp.lang.python Subject: Re: Two aces up Python's sleeve Date: Fri, 8 Nov 2024 01:29:48 +0100 Message-ID: References: <050c2ce9efd8442fb902ecc926afb1ee42fe6c34.camel@tilde.green> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Injection-Date: Fri, 8 Nov 2024 00:29:48 -0000 (UTC) Injection-Info: solani.org; logging-data="674103"; mail-complaints-to="abuse@news.solani.org" User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0 SeaMonkey/2.53.19 Cancel-Lock: sha1:7JneXaYjmF8CoX/GdUWxJPiax4s= In-Reply-To: X-User-ID: eJwNyskBwCAIBMCWFrmkHES3/xKSeY9rSExaeJjTybMvz6znmN3I0eyz0KUlQlVllptx30LByMj7x3xsUCAfaGEVxQ== Bytes: 2747 Lines: 57 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. >> >