Это вопрос с подвохом, и начинающие разработчики часто не видят разницы. И… привет, баги! Так что давайте разбираться, в чём же разница.
Если просто, то
is проверяет идентичность, а == проверяет равенство. Чтобы лучше понять, создадим 2 списка, а переменной b присвоим значение списка a:a = [1,2,3]b = ac = [1,2,3]Если проверим равенство, то все объекты будут равны:
print(a == b) #=> Trueprint(a == c) #=> TrueА вот если мы проверим их идентичность, то получается следующее:
print(a is b) #=> Trueprint(a is c) #=> FalseНесмотря на одинаковое содержимое, сами списки представлены разными объектами в памяти, поэтому оператор
is для одинаковых списков возвращает False. Проверить очень просто — у объектов будут разные идентификаторы:print(id(a)) #=> 4369567560print(id(b)) #=> 4369567560print(id(c)) #=> 4369567624Это всё, что нужно знать про
is и == на базовом уровне. Но есть несколько лайфхаков и нюансов, которые помогут использовать эти операторы на полную катушку. О них расскажу чуть позже.#собеседование