Задал такой вопрос. Почему только тип str и boolean с одинаковыми переменными относятся к одному месту памяти:
a = 'something'
b = 'something'
if a is b: print('True') # True
но мы нигде не писали a=b. следовательно, интерпретатор увидел, что строки равны друг другу, и сделал ссылку на одну ячейку памяти.
Конечно, если мы присвоим новое значение любой из этих двух переменных, конфликта не будет, поэтому теперь переменная будет ссылаться на другую ячейку памяти
b = 'something more'
if a is b: print('True') # False
с логическим типом все то же самое
a = True
b = True
if a is b: print('True') # True
Сначала я подумал, что это происходит со всеми изменяемыми типами. Но нет. Остался один неизменный тип — кортеж. Но у него другое поведение, то есть когда мы присваиваем переменным одинаковые значения, мы уже обращаемся к разным ячейкам памяти. Почему это происходит только с кортежем неизменяемых типов
a = (1,9,8)
b = (1,9,8)
if a is b: print('True') # False
Подробнее здесь: https://stackoverflow.com/questions/476 ... y-location