我想知道这种行为的原因是什么(CPython 2.7和3.5):
>>> a = 's' ; b = 's'
>>> id(a), id(b)
(4322870976, 4322870976)
短于21个字符的字符串似乎共享相同的内存地址(或id)。
>>> a = 's' * 20 ; b = 's' * 20
>>> id(a), id(b)
(4324218680, 4324218680)
从21开始,此行为会发生变化。
>>> a = 's' * 21 ; b = 's' * 21
>>> id(a), id(b)
(4324218536, 4324218608)
我无法找到合理的解释,但根据python docs:
例如,a = 1之后; b = 1,a和b可能会或可能不会引用值为1的同一对象,具体取决于实现...
在查看cpython's code之后,我无法找到做出此决定的地方。