Python 文字列: 不変エンティティと代入の混乱
Python は文字列の不変性に誇りを持っており、一度作成された文字列値は変更できないことを暗示しています。ただし、文字列の連結を試行した際に遭遇した複雑な動作により、この不変性について疑問が生じます。
パズル: 連結による不変文字列の変更?
次のコード スニペットを考えてみましょう。
<code class="python">a = "Dog" b = "eats" c = "treats" print(a, b, c) # Dog eats treats print(a + " " + b + " " + c) # Dog eats treats print(a) # Dog a = a + " " + b + " " + c print(a) # Dog eats treats # Surprise!</code>
このコードは、最初に 3 つの文字列を初期化し、次にそれらをスペースで連結します。驚いたことに、連結結果への再代入後に a の値が変化します。
解明: 文字列の突然変異ではなく変数の再代入
この動作を理解する鍵は次のとおりです。 Python 文字列は確かに不変ですが、その参照は変更可能であることを認識します。最後の行で a を再割り当てするとき、既存の文字列「Dog」は変更されません。代わりに、新しい文字列「Dog Eats Treats」を作成し、その参照を a に割り当てます。
The Immutable Truth Remains
本質的に、文字列変数には値自体ではなく、文字列値へのアドレス (または参照)。変数を別のアドレスに再割り当てできますが、それらのアドレスの文字列値は変更できません。
したがって、文字列を連結して変更しているように見えますが、単に新しい文字列を作成して参照を再割り当てしているだけです。 。文字列の不変性はそのまま残ります。
以上がPython では文字列の連結が不変の文字列をどのように変更するように見えるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。