On Sat, May 7, 2016 at 4:36 PM, Anthony Papillion
<anth...@cajuntechie.org> wrote:
> I'm trying to figure out why the following statements evaluate the way they 
> do and I'm not grasping it for some reason. I'm hoping someone can help me.
>
> 40+2 is 42 #evaluates to True
> But
> 2**32 is 2**32 #evaluates to False
>
> This is an example taken from a Microsoft blog on the topic. They say the 
> reason is because the return is based on identity and not value but, to me, 
> these statements are fairly equal.

Frankly, you shouldn't care. Integers and strings should always be
compared for equality ("=="), not identity ("is"). Everything else is
an interpreter optimization; what you'll find is that some small
integers are cached deep within CPython, so the integer 7 is always
the same object. The exact set that's cached varies from version to
version of CPython, and other interpreters mightn't do that at all -
or might not even have actual in-memory objects for *any* integers in
the machine word range, using their values directly. Or anything at
all.

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

Reply via email to