Что-то о id
объектов типа str
(в python 2.7) меня озадачивает. Тип str
неизменен, поэтому я ожидал бы, что после его создания он всегда будет иметь тот же id
. Я считаю, что я не очень хорошо формулирую себя, поэтому вместо этого я отправлю пример последовательности ввода и вывода.
>>> id('so')
140614155123888
>>> id('so')
140614155123848
>>> id('so')
140614155123808
поэтому между тем он меняется все время. Однако после изменения переменной, указывающей на эту строку, все меняется:
>>> so = 'so'
>>> id('so')
140614155123728
>>> so = 'so'
>>> id(so)
140614155123728
>>> not_so = 'so'
>>> id(not_so)
140614155123728
Итак, похоже, что он зависает от id, как только переменная содержит это значение. Действительно, после del so
и del not_so
вывод id('so')
снова начинает меняться.
Это не то же поведение, что и с (малыми) целыми числами.
Я знаю, что нет реальной связи между неизменностью и тем же id
; Тем не менее, я пытаюсь выяснить источник этого поведения. Я считаю, что кто-то, кто знаком с внутренностями python, будет менее удивлен, чем я, поэтому я пытаюсь достичь той же точки...
Update
Попытка того же с другой строкой давала разные результаты...
>>> id('hello')
139978087896384
>>> id('hello')
139978087896384
>>> id('hello')
139978087896384
Теперь он равен...