Как неназначенная строка в Python может иметь адрес в памяти?Python

Программы на Python
Anonymous
Как неназначенная строка в Python может иметь адрес в памяти?

Сообщение Anonymous »

Может кто-нибудь объяснить мне это? Итак, я поигрался с командой 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
Я ожидал, что идентификаторы будут одинаковыми, но это не так. Мысли?

Вернуться в «Python»