大于 21 个字符的 CPython 字符串 - 内存分配
CPython strings larger than 21 chars - memory allocation
我想知道这种行为的原因可能是什么(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:
E.g., after a = 1; b = 1, a and b may or may not refer to the same object with the value one, depending on the implementation...
看了cpython's code之后,我找不到这个决定是在哪里做出的。
我想知道这种行为的原因可能是什么(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:
E.g., after a = 1; b = 1, a and b may or may not refer to the same object with the value one, depending on the implementation...
看了cpython's code之后,我找不到这个决定是在哪里做出的。