'is'演算子がリテラルで機能するように、Pythonが文字列を格納する方法は?
>>> a = 5
>>> a is 5
True
しかし
>>> a = 500
>>> a is 500
False
それは単一のアドレスとして低い整数値を格納するためです。しかし、数値が複雑になると、各intは固有のアドレス空間を取得します。これは私には意味がある。
現在の実装では、-5から256までのすべての整数の配列を保持しています。その範囲にintを作成すると、実際には既存のオブジェクトへの参照が返されます。
ここで、これは文字列には適用されないのはなぜですか?文字列は大きな整数ほど複雑ではありません(moresoでない場合)?
>>> a = '1234567'
>>> a is '1234567'
True
pythonはどのようにしてすべての文字列リテラルに対して同じアドレスを効率的に使用しますか?それは数字のようにすべての可能な文字列の配列を保持できません。
'is'オブジェクト' id'sを比較します –
これはメモリアドレスも比較します。 http://stackoverflow.com/questions/2987958/how-is-the-is-keyword-implemented-in-python –
id == CPython IIRCのメモリアドレスを参照してください。 –