Підсумок:
Використовуйте, is
коли ви хочете перевірити ідентичність об'єкта (наприклад, перевірити, чи var
є None
). Використовуйте, ==
коли ви хочете перевірити рівність (наприклад, var
дорівнює 3
?).
Пояснення:
Ви можете мати власні класи, куди my_var == None
повернетесьTrue
наприклад:
class Negator(object):
def __eq__(self,other):
return not other
thing = Negator()
print thing == None #True
print thing is None #False
is
перевірки ідентичності об'єкта . Є лише 1 об’єкт None
, тож коли ви це робите my_var is None
, ви перевіряєте, чи є вони насправді одним і тим же об’єктом (а не лише еквівалентними об'єктами)
Іншими словами, ==
це перевірка на еквівалентність (яка визначається від об'єкта до об'єкта), тоді як is
перевірка ідентичності об'єкта:
lst = [1,2,3]
lst == lst[:] # This is True since the lists are "equivalent"
lst is lst[:] # This is False since they're actually different objects
is
- python.org/dev/peps/pep-0008/#programming-recommendations