ホームページ > バックエンド開発 > Python チュートリアル > Python インターン文字列はコンパイル時または実行時に使用されますか?これは比較にどのような影響を与えますか?

Python インターン文字列はコンパイル時または実行時に使用されますか?これは比較にどのような影響を与えますか?

Linda Hamilton
リリース: 2024-12-14 02:03:10
オリジナル
668 人が閲覧しました

Does Python Intern Strings at Compile Time or Run Time, and How Does This Affect Comparisons?

Python 文字列インターニングについて

文字列インターニングは、同じ内容を持つ複数の文字列がメモリ内の同じオブジェクトを共有するメカニズムです。 Python は文字列インターニングを採用して、文字列処理を最適化し、メモリ使用量を削減します。

コンパイル時の文字列インターニング

最初の 2 つの例は、コンパイル時の文字列インターニングを示しています。両方の文字列 ("string" と "strin" "g") が評価され、コンパイル時に同じ不変文字列オブジェクトに変換されます。これにより、両方の文字列が等価になり、同じメモリ アドレスを占有することになります。

実行時の文字列評価

ただし、3 番目の例には、文字列の実行時の連結が含まれます。 。コンパイル時の連結とは異なり、この操作の結果は自動的にインターンされません。したがって、「s1 "g" と "string" は異なるメモリ アドレスを占有するため、比較「s1 "g" is "string" は False を返します。

文字列インターニングの制御

sys.intern() を使用して文字列を手動でインターンできます。そうすることで、渡す文字列リテラルが既存の文字列値 (存在する場合) と同じオブジェクトであることが保証されます。

実装の詳細

文字列のインターン動作は次のものに依存します。特定の Python 実装。 CPython (最も一般的な Python 実装) はコンパイル時の定数をインターンしますが、実行時の式の結果はインターンしません。この説明は、CPython 3.9.0 以降のバージョンに適用されます。

注: Python 3.9 では、文字列リテラルで "is" を使用してそれらが等しいかどうかを比較すると、警告が発行されます。代わりに、この目的には「==」を使用してください。

以上がPython インターン文字列はコンパイル時または実行時に使用されますか?これは比較にどのような影響を与えますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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