ホームページ > バックエンド開発 > Python チュートリアル > 不変の Python 文字列の ID が変化しているように見えるのはなぜですか?

不変の Python 文字列の ID が変化しているように見えるのはなぜですか?

Linda Hamilton
リリース: 2024-12-01 07:18:11
オリジナル
723 人が閲覧しました

Why Do Immutable Python Strings Seem to Have Changing IDs?

Python における不変文字列の ID の変化について理解する

Python では、通常、文字列インターニングなどの要因により、不変文字列オブジェクトの ID が変化します。 、メモリ位置の再利用、コードの最適化。不変性は ID が一定であることを示唆していますが、次の動作が観察されています:

元の観察:

id('so') # Changes on every call
ログイン後にコピー

ID の変更:

この動作は、CPython で文字列インターンが保証されていないことが原因で発生します。 Python は常に文字列をインターンするわけではないため、id('so') を繰り返し呼び出すと異なる ID が生成される可能性があります。

メモリ位置の再利用:

Python はメモリ位置を再利用できます。新しい文字列オブジェクトが生成されるため、異なる文字列であっても ID が一致する場合があります。これは予測できず、メモリ使用量によって異なります。

コードの最適化:

Python オプティマイザーはコンパイル時に定数式 (例: 'foo' 'bar') を折りたたむことがあります。結果の文字列を単一のメモリ場所に保存します。これにより、これらの式の ID が一貫したものになります。

例外:

ASCII 文字、数字、またはアンダースコアを使用する定数文字列は、Python コンパイラによってインターンされます。したがって、同じ文字を持つ後続のリテラルは同じインターンされた文字列オブジェクトを再利用し、一貫した ID が得られます。

追加の観察:

  • 文字列をPython は変数名とその変数の両方について同じ文字列オブジェクトを参照するため、変数 (例: so = 'so') は ID を固定します。 value.
  • 外部メソッドで作成された文字列は、これらのインターニングまたは最適化ルールに従っていない可能性があります。
  • 結果が最適化制限内に収まる場合、短い文字列を連結してもインターニングが発生する可能性があります。

以上が不変の Python 文字列の ID が変化しているように見えるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート