==
is for value equality. Use it when you would like to know if two objects have the same value.is
is for reference equality. Use it when you would like to know if two references refer to the same object.
In general, when you are comparing something to a simple type, you are usually checking for value equality, so you should use
==
. For example, the intention of your example is probably to check whether x has a value equal to 2 (==
), not whether x
is literally referring to the same object as 2.Something else to note: because of the way the CPython reference implementation works, you'll get unexpected and inconsistent results if you mistakenly use
is
to compare for reference equality on integers:>>> a = 500
>>> b = 500
>>> a == b
True
>>> a is b
False
That's pretty much what we expected:
a
and b
have the same value, but are distinct entities. But what about this?>>> c = 200
>>> d = 200
>>> c == d
True
>>> c is d
True
This is inconsistent with the earlier result. What's going on here? It turns out the reference implementation of Python caches integer objects in the range -5..256 as singleton instances for performance reasons. Here's an example demonstrating this:
>>> for i in range(250, 260): a = i; print "%i: %s" % (i, a is int(str(i)));
...
250: True
251: True
252: True
253: True
254: True
255: True
256: True
257: False
258: False
259: False
This is another obvious reason not to use
is
: the behavior is left up to implementations when you're erroneously using it for value equality.
It depends on whether you're looking to see if 2 things are equal, or the same object.
is
checks to see if they are the same object, not just equal. The small ints are probably pointing to the same memory location for space efficiencyIn [29]: a = 3
In [30]: b = 3
In [31]: id(a)
Out[31]: 500729144
In [32]: id(b)
Out[32]: 500729144
You should use
==
to compare equality of arbitrary objects. You can specify the behavior with the __eq__
, and __ne__
attributes
Very well Explained
ReplyDeleteThank you for sharing! Very well Explained
DeleteDeep Learning Projects for Final Year
Machine Learning Projects for Final Year
Artificial Intelligence Projects For Final Year
Explain OOPS concept in Python.
ReplyDeleteThank you for sharing!
ReplyDelete