ホームページ  >  記事  >  バックエンド開発  >  「a \」「b」を使用すると Python 文字列が変更可能に見えるのはなぜですか?

「a \」「b」を使用すると Python 文字列が変更可能に見えるのはなぜですか?

DDD
DDDオリジナル
2024-10-31 22:20:29415ブラウズ

Why Do Python Strings Appear Mutable When Using

Python 文字列の変更可能な性質を明らかにする: " " b の探索

Python 文字列は本質的に不変であるが、奇妙な観察がこの概念に疑問を投げかけます。 a " " b 構文を使用して文字列を連結すると、文字列が変更されたように見えます。この不可解な動作を調査してみましょう。

コードの調査

次のコード スニペットを考えてみましょう:

<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
# !!!</code>

異常を理解する

私たちの理解によると、Python 文字列は不変であり、その内容を直接操作することは禁止されています。ただし、上記のコードはそうではないことを示しています。 a = a " " b " " c という行を実行すると、a が指す文字列が変更されたように見え、混乱が生じます。

謎を解く

ここにこの動作を理解するための鍵があります: Python 文字列自体は不変のままです。代わりに、変数 a は、連結された内容を含む新しい文字列オブジェクトに再割り当てされます。

コードの最初の部分では、a は最初に文字列「Dog」を指します。 " " b を使用して文字列を連結すると、連結結果を含む新しい文字列がメモリ内に作成されます。この場合は、「犬がおやつを食べる」という文字列が含まれます。ただし、 a は依然として元の "Dog" 文字列を指します。

値 a " " b " " c を a に割り当てると、連結結果「Dog Eats treats」を含む新しい文字列オブジェクトが作成されます。 " となり、a はこの新しい文字列を指すようになります。元の「Dog」文字列は変更されず、引き続きメモリ内でアクセスできます。

したがって、このコンテキストにおける文字列の明らかな変更は、文字列の変更ではなく、文字列を指す変数の再割り当ての結果です。自体。 Python 文字列は、その不変の性質を維持しながら、それを指す参照を変更する柔軟性を提供します。

以上が「a \」「b」を使用すると Python 文字列が変更可能に見えるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。