is
используется для проверки подлинности, чтобы проверить, указывают ли обе переменные на один и тот же объект, , а ==
используется для проверки значений.
От docs:
Операторы is
и is not
тест для идентичности объекта: x is y
является true
тогда и только тогда, когда х и у того же объекта. x is not y
дает обратное значение истины .
>>> id(1000-1) == id(999)
False
""" What is id?
id(object) -> integer
Return the identity of an object. This is guaranteed to be unique among
simultaneously existing objects. (Hint: it's the object's memory address.)
"""
>>> 1000-1 is 999
False
>>> 1000-1 == 999
True
>>> x = [1]
>>> y = x #now y and x both point to the same object
>>> y is x
True
>>> id(y) == id(x)
True
>>> x = [1]
>>> y = [1]
>>> x == y
True
>>> x is y
False
>>> id(x),id(y) #different IDs
(161420364, 161420012)
Но некоторые небольшие целые числа (-5 256) и небольшие строки в кэш Python: Why (0-6) is -6 = False?
#small strings
>>> x = "foo"
>>> y = "foo"
>>> x is y
True
>>> x == y
True
#huge string
>>> x = "foo"*1000
>>> y = "foo"*1000
>>> x is y
False
>>> x==y
True
'>>> 2-1 is 1' возвращает' True' lol – TehTris
@carlosdc его не совсем дубликат. Поскольку он работает для других чисел. Вот почему я спросил. – Rahul
@Rahul Измените это в своем вопросе. – askewchan