How to test if an object IS another object?

Bruno Desthuilliers bdesth.quelquechose at free.quelquepart.fr
Sun Jun 12 22:52:51 CEST 2005


eloff777 at yahoo.com a écrit :
> Sorry about removing my message, I posted with the wrong google
> account, I don't really want my email where those irritating spam bots
> can find it.
> 
> 
>>The most obvious way (as usual ?):
>>
>>if obj1 is obj2:
>> // your code here
> 
> 
> I immediately thought of is, and tested it in the console, but it
> didn't work quite like I expected:
> 
> 
>>foo = 3
>>bar = 3
>>zoo = foo
>>foo is zoo
> 
> True
> 
>>foo is bar
> 
> True
> 
>>zoo is bar
> 
> True
> 
> clearly foo and bar have the same value but they are different objects
> aren't they? 

Nope. They are two different names bound to the same integer object. You 
may have similar situation with strings:

 >>> s1 = "toto"
 >>> s2 = "toto"
 >>> s1 is s2
True

This is an application of the lightweight pattern. The Python 
interpreter reuse the same "value object" to avoid memory clutter. Since 
ints and strings are immutable, this is perfectly safe (but yet 
confusing when you're not aware of this).


> Yet applying the is operator yields True.

Yes. But now you know why !-)

And don't worry, this is quite unlikely that it will cause you any 
trouble in real code.



More information about the Python-list mailing list