2012-03-05 59 views
0

我發現奇怪的是,一個字符串對象上的字符串方法操作不會修改字符串對象。爲什麼?昨天我浪費了相當多的時間試圖瞭解爲什麼我的代碼在我最終發現這個時無法正常工作。爲什麼字符串對象上的字符串方法不能修改Python中的對象?

+1

也許問自己,爲什麼你認爲字符串可以修改。做了文檔誤引導你?你有沒有做出一個假設,因爲其他語言以不同的方式工作?順便說一句,數字也是不可變的 – cdarke 2012-03-05 11:30:56

+0

@cdarke是的,我做過了,我有一個'金髮'(沒有冒犯金髮)的時刻。 :D – Mir 2012-03-05 19:33:25

回答

4

字符串在Python中是不可變的類型。不變的主要優點是:

  • 簡化多線程編程。
  • 可用作字典鍵(將保持相同的散列)
4

字符串是通過在Python設計不可變的。這對其他許多語言也很常見,所以它不是一個Python特有的東西。對於「爲什麼?」請參閱SO上的these excellent answers,以及Eric Lippert的this great blog post

這就是爲什麼字符串操作總是返回一個新的字符串(你則可以重新分配到同一個名稱如像

mystr = mystr.upper() 
+0

你可以使用'mystr.strip()。lower()' – warvariuc 2012-03-05 10:34:26

+0

@warwaruk:是的,但如果方法會在原地修改字符串(也返回它),那麼你也可以這樣做。當然,這會違反另一個Python原理... – 2012-03-05 10:37:35

+0

通常在Python中,如果某個方法修改了該對象,它將返回None ... – warvariuc 2012-03-05 10:42:20