В чем различие == и IS в Python?
- оператор==проверяет равенство значений двух объектов
- оператор is проверяет идентичность самих объектов. Его используют, чтобы удостовериться, что переменные указывают на один и тот же объект в памяти
Python (CPython, если быть точнее) в целях производительности кеширует короткие строки и малые целые числа, поэтому возможны такие казусы:>>> str1 = 'hello'
>>> str2 = 'hello'
>>> str1 == str2
True
>>> str1 is str2
True
>>>
Но стоит сделать строку длиннее и всё встаёт на свои места:>>> str1 = 'hello, my crazy world'
>>> str2 = 'hello, my crazy world'
>>> str1 == str2
True
>>> str1 is str2
False
The current implementation keeps an array of integer objects for all integers between -5 and 256, when you create an int in that range you actually just get back a reference to the existing object. So it should be possible to change the value of 1. I suspect the behaviour of Python in this case is undefined. :-)
https://docs.python.org/2/c-api/int.html#c.PyInt_F...
в 3 тоже самое