2012-03-05 9 views
0

文字列オブジェクトの文字列メソッド操作で文字列オブジェクトが変更されないことがわかった。それはなぜです?私は最終的にこれを発見したときに私のコードがなぜ機能していなかったのか理解しようと、昨日かなり時間を無駄にしました。文字列オブジェクトのstringメソッドがPythonのオブジェクトを変更しないのはなぜですか?

+1

はたぶん自分自身に問うような前と同じ名前に再割り当てることができ、新たな文字列を(返す理由です

は。ドキュメント誤をしました他の言語が違っていると仮定していたのですか?数字はまた不変です。 – cdarke

+0

@cdarkeはい、私はそれらの「ブロンド」(ブロンドの罪を犯さない)の瞬間を持っていました。 :D – Mir

答えて

4

文字列はPythonでは不変な型です。不変であることの主な利点は、

  • マルチスレッドプログラミングを簡素化することです。
4

文字列はPythonで設計することにより不変である(同じハッシュを維持します)辞書のキーとして使用することができます。これは他の多くの言語にも共通するので、Python固有のものではありません。 「なぜ?」 SOの場合はthese excellent answers、Eric Lippertの場合はthis great blog postをご覧ください。文字列操作は、常にあなたは、あなたが文字列を変更することができると思っていた理由を

mystr = mystr.upper() 
+0

そして、あなたは 'mystr.strip()。lower()'を使うことができます – warvariuc

+0

@warwaruk:Trueですが、もしメソッドが文字列をインプレースで修正する(そしてそれを返す)それは違反する別のPythonの原則... –

+0

通常、Pythonでメソッドがオブジェクトを修正する場合は、Noneを返します。 – warvariuc

関連する問題