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

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

Я бы предсказал, что идентификаторы будут такими же, но это не так. Мысли?

45
задан Kevin Reid 2 June 2013 в 14:55
поделиться