Підсумок:
Використовуйте, 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