Может кто-нибудь объяснить мне это? Итак, я поигрался с командой id() в Python и наткнулся на это:
Код: Выделить всё
>>> id('cat')
5181152
>>> a = 'cat'
>>> b = 'cat'
>>> id(a)
5181152
>>> id(b)
5181152
Для меня это имеет некоторый смысл, за исключением одной части: строка «cat» имеет адрес в памяти до того, как я присвою его переменной. Я, вероятно, просто не понимаю, как работает адресация памяти, но может ли кто-нибудь объяснить мне это или хотя бы сказать, что мне следует прочитать об адресации памяти?
Итак, это все хорошо, но это меня еще больше смутило:
Код: Выделить всё
>>> a = a[0:2]+'t'
>>> a
'cat'
>>> id(a)
39964224
>>> id('cat')
5181152
Это показалось мне странным, потому что
'cat' — это строка с адресом 5181152, а новый
a имеет другой адрес. Итак, если в памяти есть две строки
'cat', почему не выводятся два адреса для
id('cat')? Моей последней мыслью было, что конкатенация как-то связана с изменением адреса, поэтому я попробовал следующее:
Код: Выделить всё
>>> id(b[0:2]+'t')
39921024
>>> b = b[0:2]+'t'
>>> b
'cat'
>>> id(b)
40000896
Я ожидал, что идентификаторы будут одинаковыми, но это не так. Мысли?