ホームページ > バックエンド開発 > Python チュートリアル > Python では文字列の連結が不変の文字列をどのように変更するように見えるのでしょうか?

Python では文字列の連結が不変の文字列をどのように変更するように見えるのでしょうか?

Barbara Streisand
リリース: 2024-10-29 20:22:30
オリジナル
665 人が閲覧しました

How Can String Concatenation Seem to Mutate Immutable Strings in Python?

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 サイトの他の関連記事を参照してください。

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