what is the keyword "is" for?
Kirk McDonald
kirklin.mcdonald at gmail.com
Tue Aug 15 03:11:53 EDT 2006
daniel wrote:
> I'm so confused by the keyword "is" and "==" equal sign, it seems they
> could be exchanged in some contexts, but not in others, what's the
> difference between them in terms of comparation?
>
> thanks...
>
> daniel
>
'is' compares object identity. == compares values.
>>> a = [1, 2, 3]
>>> b = [1, 2, 3]
>>> a is b
False
>>> a == b
True
In this example, a and b refer to two separate lists that happen to hold
the same values. Thus, 'is' returns False, and == returns True. On the
other hand:
>>> c = d = [4, 5, 6]
>>> c is d
True
>>> c == d
True
Here, c and d refer to the same list. Therefore, 'is' returns true (they
both refer to the same object), as does == (an object is always equal to
itself, unless you overload the equality check in a weird way).
The distinction can easily be seen if we try to mutate these lists:
>>> a.append(4)
>>> a is b
False
>>> a == b
False
>>> c.append(7)
>>> c is d
True
>>> c == d
True
When we mutate a, b is not affected. They are two different lists, and
changing 'a' makes it so they are no longer equal.
When we mutate c, d IS affected; they refer to the same list.
You can easily confuse yourself if you ever talk about applying 'is' to
(for example) integers. Python may re-use certain small integers when
you might not expect it to; this is done in the interests of efficiency.
If you only compare the /values/ of numbers (with ==), then you will
never notice this.
>>> a = 1
>>> b = 1
>>> c = 1000000
>>> d = 1000000
>>> a is b
True
>>> c is d
False
-Kirk McDonald
More information about the Python-list
mailing list