使整數可變將與我們習慣使用它們的方式非常不直觀。
考慮以下代碼片段:
a = 1 # assign 1 to a
b = a+2 # assign 3 to b, leave a at 1
後這些任務執行我們預計一個有值1和b有值3加法運算是創建一個新的整數值從存儲的整數和整數2的一個實例。 如果加法操作只取整數a並且只是突變它然後a和b將具有值3.
因此,我們期望算術運算爲其結果創建新值 - 而不是改變它們的輸入參數。
但是,在某些情況下,更改數據結構更方便更高效。假設目前list.append(x)
沒有修改list
,但返回了list
的新副本,並且附加了x
。 然後這樣的功能:
def foo():
nums = []
for x in range(0,10):
nums.append(x)
return nums
將只返回空列表。 (記住 - 在這裏nums.append(x)
不會改變nums
- 它返回與x
一個新的列表添加數據,但這個新的列表不保存任何地方。)
我們將不得不寫foo
程序是這樣的:
def foo():
nums = []
for x in range(0,10):
nums = nums.append(x)
return nums
(這其實是非常相似,在使用Python字符串局面直到大約2.6或者是2.5)。
而且,我們每次分配nums = nums.append(x)
時間,我們將複製大小爲導致增加的列表在二次行爲。 由於這些原因,我們列出了可變對象對象。
的後果,以使列出可變的是,這些語句後:
a = [1,2,3]
b = a
a.append(4)
列表b已更改爲[1,2,3,4]
。這是我們生活的東西,儘管它現在仍然讓我們trips trips不安。
你想要改變一個整數究竟是什麼?位? –
假設某些類型的不變性可以實現各種優化。這些優化對於'str'來說是_most_發音,但它們也起作用於'int','float','tuple','frozenset' ......有些人可能會認爲不變性使得代碼更易於閱讀情況也一樣。再加上事實上,沒有一種自然的方式來改變整數(除了'+ =','* =',...這是非常罕見的......),而且似乎並不好沒有一成不變的理由。 – mgilson
如果你可以修改值'1'爲'2',值'2'爲'1',那麼'2 + 2 == 1'就是'true';那真的是你想要的嗎? –