Python文字列プーリングの前提

序文

Pythonでは、パフォーマンスを向上させるためにメモリプーリングテクノロジがよく使用されるため、問題は、どのような状況でプーリングを行うかということです。いくつかの例を通して理解しましょう。

予備知識

例を見る前に、まずpythonの関数id()について言及し、関数の説明を見てみましょう。

id(obj,/)
 Return the identity of an object.

 This is guaranteed to be unique among simultaneously existing objects.(CPython uses the object \'s memory address.)

上記の説明から、id()はオブジェクトの一意の識別子を返し、CPythonではメモリアドレスを返すことがわかります。つまり、2つのオブジェクトのid値が同じである場合、2つのオブジェクトは同じであると言えます。 。

example 00

a =""
b =""print(id(a),id(b))print(a is b)

出力結果:

a = “”
b = “”
print(id(a),id(b))
2114853370544 2114853370544
print(a is b)
True

example 01

a ="a"
b ="a"print(id(a),id(b))print(a is b)

出力結果:

a = “a”
b = “a”
print(id(a),id(b))
2114883022608 2114883022608
print(a is b)
True

example 02

a ="magic_string"
b ="magic"+"_"+"string"print(id(a),id(b))print(a is b)

出力結果:

a = “magic_string”
b = “magic” + “_” + “string”
print(id(a),id(b))
2114887161136 2114887161136
print(a is b)
True

example 03

a ="magic!"
b ="mgaic!"print(id(a),id(b))print(a is b)

出力結果:

a = “magic!”
b = “mgaic!”
print(id(a),id(b))
2114885855416 2114889455408
print(a is b)
False

example 04

a,b ="magic!","magic!"print(id(a),id(b))print(a is b)

出力結果:
a,b = “magic!”,”magic!”
print(id(a),id(b))
2114885691912 2114885691912
print(a is b)
True

example 05

a ="!"
b ="!"print(id(a),id(b))print(a is b)

出力結果:

a = “!”
b = “!”
print(id(a),id(b))
140564571922024 140564571922024
print(a is b)
True

example 06

print(a*20 is 'aaaaaaaaaaaaaaaaaaaa')print(a*21 is 'aaaaaaaaaaaaaaaaaaaaa')

出力結果:

print(a20 is ‘aaaaaaaaaaaaaaaaaaaa’)
False
print(a
21 is ‘aaaaaaaaaaaaaaaaaaaaa’)
False

総括する

上記の7つの例を通して、pythonの文字列プーリングの一般的な理解を得るのは難しくありません。ここで簡単な要約を作成しましょう。

  1. 例00、01、05から、長さが0または1の文字列がプールされると結論付けることができます。
  2. 例02、03を通じて、英数字と下線のみを含む文字列がプールされると結論付けることができます。
  3. 例04を使用すると、同じ行に異なる変数を割り当てるときに、同じ値が割り当てられている場合、それらは同じオブジェクトを指すことがわかります。内部の「magic!」はプーリングの要件を満たしていないことに注意してください。これは単なるコンパイルです。最適化
  4. 例06の現象は、pythonで専門用語があります。定数の折りたたみ。名前が示すように、コンパイルおよび最適化すると、計算できる変数が直接定数に置き換えられますが、制限はありませんか?明らかにそうではありません。この例では、長さが20を超えると、折り畳みが失敗することがわかりました。制限がない場合、初期化された文字列が長すぎるため、パフォーマンスとメモリが大幅に低下することを想像してみてください。消費する

参照リンク

The internals of Python string interning

exploring python code objects

Python string interning

Python String objects implementation

上記は、Python文字列プーリングの前提の詳細な内容です。Python文字列プーリングの詳細については、ZaLou.Cnの他の関連記事に注意してください。

Recommended Posts

Python文字列プーリングの前提
Pythonの基盤を統合する(4)
Python(7)の基盤を統合する
Python(6)の基盤を統合する
Python(5)の基盤を統合する
Pythonの基盤を統合する(3)
pythonでのwheelの使用法
Python文字列
Pythonは中国語の4つの車輪を処理します
地主取引のPythonシミュレーション
Pythonの用途は何ですか
Python3.8の新機能の秘密
Python文字列
Pythonの父がMicrosoftに加わる
python accesshdfsの操作
pythonでのタプルの使用法
pythonを実行するメソッドを終了します
pythonでのrbの意味を理解する
Pythonはスタックの構造を実装できますか?
pythonインタラクティブモードの基本を学ぶ
pythonの必須パラメーターは何ですか
pythonの下部にあるロジスティック回帰
Python3クローラーでのAjaxの使用
PythonはTowerofHanoiゲームを解決します
パスワードの強度を判断するためのPython文字列
pythonの複数のバージョンの競合を解決します
python変数の範囲は何ですか
Pythonは分数シーケンスの合計を実装します
Pythonの基礎を学ぶ2日間
pythonのid関数は何ですか
python3のピップパスはどこにありますか
Python言語の本質:Itertoolsライブラリ
python言語の利点は何ですか
pythonインスタンス化オブジェクトの特定のメソッド
python3はマスク描画の機能を実現します
pythonの関数本体は何ですか
pythonインポートライブラリの特定の方法
pythonの複数のバージョンの競合を解決します
Python文字列操作
Python3.9の7つの機能
2.1 Pythonインタープリター(pythonインタープリター)
pythonでのadbの機能は何ですか
Python super()メソッドの原理の詳細な説明
javaとpythonの構文の違い
PythonはDoudizhuでカードのシャッフルを実装します
pythonでのリストの意味と使用法
起動エラーを実行しているpythonの問題を解決します
Pythonはスネークゲームのソースコードを実装しています
27歳でパイソンを学ぶのはどうですか?
ubuntuでpythonをアンインストールした結果、非常に
Pythonは釣りマスターのゲーム実装を書きます
[898] pythonは2つのリストの共通部分を取得します|ユニオン|違い
Python関数パラメータ分類の原理の詳細な説明
エンタープライズ言語に対するpythonの利点は何ですか
Python2とPython3の違いの簡単な要約
Pythonタイマースレッドプールの原理の詳細な説明
pythonのコンパイルとsslのインストールの問題を解決します
Pythonインターフェース開発の実装手順の詳細な説明
pythonはどのように辞書のキーを呼び出しますか
Pythonはスキンのフルセットをクロールします
Pythonでのパッケージの導入を理解する方法