字符串驻留
Python支持字符串驻留机制,即:对于短字符串,将其赋值给多个不同的对象时,内存中只有一个副本,多个对象共享该副本。
这一点不适用于长字符串,即长字符串不遵守驻留机制,下面的代码演示了短字符串和长字符串在这方面的区别。
>>> a = '1234'
>>> b = '1234'
>>> id(a) == id(b)
True
>>> a = '1234'*50
>>> b = '1234'*50
>>> id(a) == id(b)
False
>>> a = 'something'
>>> b = 'some'+'thing'
>>> id(a) == id(b)
True
下面例子结果是False
:
>>> a = '@hello'
>>> b = '@he'+'llo'
>>> id(a) == id(b)
False
这与Cpython 编译优化相关,行为称为
字符串驻留
,但驻留的字符串中只包含字母,数字或下划线。