DEV Community

YusufAdel
YusufAdel

Posted on

Object Comparisons: “is” vs “==”

The == operator compares by checking for equality: if these Python objects we compared them with the == operator, we’d get both objects are equal as an answer.

The is operator, however, compares identities: if we compared our
objects with the is operator, we’d get these are two different objects as an answer.

let’s take a look at some real Python code.

>>> a = [1, 2, 3]
>>> b = a
Enter fullscreen mode Exit fullscreen mode

Let’s inspect these two variables. We can see that they point to
identical-looking lists:

>>> a
[1, 2, 3]
>>> b
[1, 2, 3]
Enter fullscreen mode Exit fullscreen mode

Because the two list objects look the same, we’ll get the expected result
when we compare them for equality by using the == operator:

>>> a == b
True
Enter fullscreen mode Exit fullscreen mode

However, that doesn’t tell us whether a and b are actually pointing to
the same object. Of course, we know they are because we assigned
them earlier, but suppose we didn’t know—how might we find out?

The answer is to compare both variables with the is operator. This
confirms that both variables are in fact pointing to one list object:

>>> a is b
True
Enter fullscreen mode Exit fullscreen mode

Let’s see what happens when we create an identical copy of our list
object. We can do that by calling list() on the existing list to create
a copy we’ll name c:

>>> c = list(a)
Enter fullscreen mode Exit fullscreen mode

Again you’ll see that the new list we just created looks identical to the
list object pointed to by a and b:

>>> c
[1, 2, 3]
Enter fullscreen mode Exit fullscreen mode

Now this is where it gets interesting. Let’s compare our list copy c with
the initial list a using the == operator. What answer do you expect to
see?

>>> a == c
True
Enter fullscreen mode Exit fullscreen mode

Okay, I hope this was what you expected. What this result tells us
is that c and a have the same contents. They’re considered equal by
Python. But are they actually pointing to the same object? Let’s find
out with the is operator:

>>> a is c
False
Enter fullscreen mode Exit fullscreen mode

This is where we get a different result. Python is telling us
that c and a are pointing to two different objects, even though their
contents might be the same.

Conclusion:

  • An "is" expression evaluates to True if two variables point to the same (identical) object.
  • An "==" expression evaluates to True if the objects referred to by the variables are equal (have the same contents).

Top comments (0)