2016-03-08 21 views
1

我注意到Python中有一個我想了解的現象,但我不知道用什麼詞來描述它或查找文檔。爲什麼列表和字符串上的方法在python中的工作方式不同

比較如下序列:

1)

a = ['my', 'nice', 'new', 'list'] 
a.reverse() 
print(a) 

>>> ['list', 'new', 'nice', 'my'] 

2)

b = 'my nice new string' 
b.swapcase() 
print(b) 

>>> 'my nice new string' 

爲什麼說,對於第二序列中,爲了打印,得到「MY NICE NEW STRING',我必須寫

b = b.swapcase() 
print(b) 

?或者相反,爲什麼在第一個序列中打印之前(a)不必寫a = a.reverse()?爲什麼這些方法中的某些需要顯式分配給變量,而其他方法則隱式存儲在變量中,這些原理的原理是什麼?

回答

2

某些函數修改列表,有些返回修改後的版本。例如.reversed()而不是.reverse()將返回一個反向排序列表,而不是修改列表本身。對於可變對象,如列表,字典等,您可以選擇修改對象本身。

你不能有一個版本的.swapcase()可修改原始字符串,雖然因爲字符串是不可變的:

https://docs.python.org/2/reference/datamodel.html

對象,其值可以改變被認爲是可變的;一旦創建它們的對象的 不可更改的對象稱爲不可變的。 (包含對可變對象 的引用的不可變容器對象的 值在更改後者的值時可能會更改;但是 容器仍被視爲不可變,因爲它包含的對象集合無法更改,因此,不可變性不是 與具有不可更改的值嚴格相同,它更微妙。) 對象的可變性由其類型決定;例如, 數字,字符串和元組是不可變的,而字典和 列表是可變的。

0

該列表是可變數據結構的引用變量。調用它的reverse方法反轉列表「到位」。

swapcase方法返回一個新的字符串,因爲字符串在Python中是不可變的

相關問題