Result of ``a is b''

Peter Hansen peter at engcorp.com
Tue Mar 16 16:07:31 EST 2004


Axel Boldt wrote:

> David MacQuigg <dmq at gain.com> wrote 
> 
> 
>>>>>x = 'akdijfkdienlskfi'
>>>>>y = 'akdijfkdienlskfi'
>>>>>x is y
>>
>> True
>>
>>>>>x = 'a b'
>>>>>y = 'a b'
>>>>>x is y
>>
>> False
> 
> 
> Wow. So it seems that the action of "is" on immutables is unspecified
> and implementation dependent, thus useless to the programmer.

Absolutely not!  "is" does what it does, and the definition of what it 
does is very explicit.  It checks *identity*, not equality.  In both 
examples above, the code is semantically meaningless because you are 
checking identity on two things which you just created at the command 
line, out of thin air.  They may or may not be identical, but whether 
they are or not has no importance.

I'm not being very clear, but what I mean is that "is" should be used 
when *identity* is important to you.  For example, you have a particular 
object and you want to check whether a method call returns that 
particular object, perhaps as a "sentinel" value.  "is" is what you want 
here, because you are checking whether *that specific object* is being 
returned, not whether the returned item equals that object in value.

There are very good (and correct) times to use "is", but the trivial 
examples above aren't them...

-Peter



More information about the Python-list mailing list