Два индивидуально созданных изменяемых списка имеют разные идентификаторы.Почему два отдельно созданных неизменяемых объекта имеют одинаковые идентификаторы и изменяемые объекты, разные, хотя оба относятся к одинаковым значениям?
Python SHELL: (изменяемые)
>>> mylist = ['spam', 'eggs']
>>> yourlist = ['spam', 'eggs']
>>> id(mylist), id(yourlist)
(49624456, 48910408)
В то время как две индивидуально созданные неизменные строки имеют одинаковые идентификаторы.
Python SHELL: (неизменное)
>>> a = 10
>>> b = 10
>>> id(a), id(b)
(507099072, 507099072)
Является a
и b
ссылки на тот же объект? Если нет, то почему идентификаторы похожи? Есть mylist
и yourlist
ссылки на разные объекты? Если да, то почему у них разные идентификаторы.
измененные объекты могут по этой причине мутировать, список создается дважды, но если вы проверяете идентификатор элемента 0 обоих списков, они должны быть идентичными. Поскольку списки изменяемы, вы не можете ожидать, что список указывает на один и тот же объект, даже если каждая «ячейка» внутри списка указывает на те же «неизменные» объекты. Неизбежные объекты не могут мутировать по этой причине, python может оптимизировать его и предотвратить дублирование. –