On Jun 20, 12:45 pm, [EMAIL PROTECTED] wrote: > On Jun 20, 9:42 am, George Sakkis <[EMAIL PROTECTED]> wrote: > > > > > On Jun 20, 12:31 pm, [EMAIL PROTECTED] wrote: > > > > I am not certain why this is the case, but... > > > > >>> a = 256 > > > >>> b = 256 > > > >>> a is b > > > > True > > > > >>> a = 257 > > > >>> b = 257 > > > >>> a is b > > > > False > > > > Can anyone explain this further? Why does it happen? 8-bit integer > > > differences? > > > No, implementation-dependent optimization (caching). For all we know, > > the next python version may cache up to 1024 or it may turn off > > caching completely; do not rely on it. More generally, do not use 'is' > > when you really mean '=='. > > > George > > Thank you George. I am very curious about some of these internal > Python things that I keep stumbling upon through friends. And thank > you for all the help!
As far it's plain curiosity it's ok, but it's a small implementation detail you shouldn't rely on. There's nothing magic about 256, just the size decided for 2.5. If you tried it on 2.4 you'd get: Python 2.4.2 (#1, Mar 8 2006, 13:24:00) [GCC 3.4.4 20050721 (Red Hat 3.4.4-2)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> a=99 >>> b=99 >>> a is b True >>> a=100 >>> b=100 >>> a is b False I was more surprised by the following: Python 2.5.1 (r251:54863, May 8 2007, 14:46:30) [GCC 3.4.6 20060404 (Red Hat 3.4.6-3)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> a= 123456; b=123456; a is b True For some reason, stacking multiple statements reuses the same object. George -- http://mail.python.org/mailman/listinfo/python-list