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? –
不是我能找到的。 –