To check foo really is a boolean and of value True, then is operator is used.
To check true-like value like 1, == is used.
in case of if context: 0, False, None, Empty String, Empty containers (List, Tuple, Dictionaries..etc.) are considered as False.
1 == True True 1 is True False 2 == True False 2 is True False True if 2 else False True lst = ['item'] lst == True False lst is True False lst == False False True if lst else False True 0 == False True None == False False True if None else False False '' == False False True if '' else False False
As a rule of thumb, you should always use is with the built-in constants True, False and None.