Экземпляр класса - это и есть объект, а переменная это просто имя, которому сопоставлено некоторое значение. А так как в Python любое значение - это объект (экземпляр) какого-то класса, то операторы
is
и
==
всегда применяются к значениям переменных, то есть к объектам (экземплярам) класса.
А чтобы понять различия между операторами
is
и
==
запустите этот код и посмотрите на вывод:
class AlwaysEqual(object):
def __eq__(self, other):
return True
instance = AlwaysEqual()
print (instance == 42) # True
print (instance is 42) # False
print (instance is AlwaysEqual()) # False
print (instance is instance) # True
Это пример класса, любой экземпляр которого всегда равен (
==
) всему, чему угодно.
В то же время, экземпляр этого класса не является (
is
) другим экземпляром этого же класса и ничем другим кроме самого себя.