私は(CPythonの2.7および3.5)、この動作の理由で何ができるか思ったんだけど:21文字より短いCPythonの文字列 - メモリ割り当て
>>> a = 's' ; b = 's'
>>> id(a), id(b)
(4322870976, 4322870976)
文字列は、同じメモリアドレスを共有しているようです(または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上で見た後...実装に依存し、値1と同じオブジェクトを
を参照しない場合があります。
なぜ20? –
私はそれを見つけることができませんでした。 –