2
我想知道什么可能是这种现象的原因(CPython的2.7和3.5):CPython的字符串长度超过21个字符大 - 内存分配
>>> 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:
例如,经过= 1; B = 1,A和B可能会或可能不会指向同一个对象与价值之一,根据实施...
找过cpython's code后,我找不到这个地方做出决定。
任何理由20? –
不是我能找到的。 –