Если у вас есть какой-либо объект, даже буквальный, ему необходимо использовать некоторое пространство в памяти.
Эта память должна быть видоизменена во время выполнения языка, и она одинакова, если она неизменна или нет.Таким образом, изменяемые объекты изменяют память, когда объект создается.
Таким образом, неизменяемый объект - это объект, который гарантированно не будет изменен во время компиляции или защищен средой выполнения при запуске программы.
В python два неизменных объекта с одинаковым значением также имеют одинаковый идентификатор, две ссылки на одно значение.
Я не думаю, что это гарантировано вообще.Например.
x = (1,2,3)
y = (1,2,3)
x is y
// => False
Когда я запускаю его в своем репле.Если это что-то вроде Common Lisp и Java, может случиться так, что реализации могут свободно использовать ячейки памяти с одинаковыми литералами, и, таким образом, любой логический результат будет приемлемым.