ホームページ >バックエンド開発 >Python チュートリアル >不変の文字列 ID が Python 2.7 で変更されたように見えるのはなぜですか?
Python 2.7 では、文字列 ID の動作が不可解になる場合があります。文字列は不変ですが、その ID は時間の経過とともに変化するようです。この記事では、この動作の背後にある理由を検討します。
Python での ID インターン
CPython は、デフォルトではすべての文字列をインターンしません。ただし、特定の基準を満たす文字列は、sys.intern() 関数または PyCode_New 関数の intern_string_constants() 呼び出しを使用してインターンされる場合があります。インインターンメントにより、コードベース内で同じ文字列が複数出現しても同じオブジェクトが使用されるようになります。
インターンの対象となる文字列には次のものがあります。
ID の変更
文字列がインターンの対象にならない場合、その ID は変化し続けます。これは、Python が新しい文字列のメモリ位置を自由に再利用できるため、同じリテラルに対して異なる ID が生成されるためです。
インターニングと文字列の使用法
ID の動作は依存します。文字列の使用方法:
文字列の連結
文字列の連結は ID にも影響します。オプティマイザーの制限内で文字列を連結するとインターン文字列が生成され、連結された文字列の ID が同じになる可能性があります。
結論
Python 2.7 における不変文字列の ID は次のとおりです。インターンのメカニズムとメモリの再利用により、常に同じであるとは限りません。これらの要素を理解すると、文字列 ID の明らかな不一致を明確にするのに役立ちます。
以上が不変の文字列 ID が Python 2.7 で変更されたように見えるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。