Asked By – Uyghur Lives Matter
It is standard convention to use
if foo is None rather than
if foo == None to test if a value is specifically
If you want to determine whether a value is exactly
True (not just a true-like value), is there any reason to use
if foo == True rather than
if foo is True? Does this vary between implementations such as CPython (2.x and 3.x), Jython, PyPy, etc.?
True is used as a singleton value that you want to differentiate from the value
'bar', or any other true-like value:
if foo is True: # vs foo == True ... elif foo == 'bar': ...
Is there a case where using
if foo is True would yield different results from
if foo == True?
NOTE: I am aware of Python booleans – if x:, vs if x == True, vs if x is True. However, it only addresses whether
if foo == True, or
if foo is True should generally be used to determine whether
foo has a true-like value.
UPDATE: According to PEP 285 § Specification:
The values False and True will be singletons, like None.
Now we will see solution for issue: Boolean identity == True vs is True
If you want to determine whether a value is exactly True (not just a true-like value), is there any reason to use if foo == True rather than if foo is True?
If you want to make sure that
foo really is a boolean and of value
True, use the
Otherwise, if the type of
foo implements its own
__eq__() that returns a true-ish value when comparing to
True, you might end up with an unexpected result.
As a rule of thumb, you should always use
is with the built-in constants
Does this vary between implementations such as CPython (2.x and 3.x), Jython, PyPy, etc.?
is will be faster than
== since the latter must honor types’ custom
__eq__ implementations, while
is can directly compare object identities (e.g., memory addresses).
I don’t know the source code of the various Python implementations by heart, but I assume that most of them can optimize that by using some internal flags for the existence of magic methods, so I suspect that you won’t notice the speed difference in practice.