2017-05-14 27 views
0

我試圖理解(在原則層面上)之間的分配(說)整數變量和列表變量之間的差異。Python和任務

整數情況下:

a=6 
b=a 
print(b) #prints 6 
a=7 
print(b) #prints 6 

有道理到我這個邏輯:在原B = A,B被賦予相同的值作爲(6),未鑑定用。所以如果我改變a的值,b的值不會改變:b與a不同。

列表的情況下:

L=[1,2] 
M = L 
print(M) 
L.append(6) 
print(M) 

這可以使感與此邏輯:以M = L我迫使M至字面上是相同的對象作爲L是,我與L.識別它所以如果L改變,那麼M也是如此。對我來說,沒有任何意義的是爲什麼我在不同的情況下需要不同的邏輯。 (可能這與整數是「不可變的」,並列出「可變的」,但我不明白這是怎麼回事。)有人能指出我的解釋嗎?行爲差異背後的原則是什麼? (我對於整數和列表的實現技術差異如何導致差異沒有太多的瞭解,但是因爲這樣設計的東西是什麼邏輯呢?)

回答

4

每個名稱是一個將參考保存到某個對象的變量。

在第一種情況下會發生什麼事是,

a = 6 
b = a # (a and b point to the same object) 

但在這裏,你改變什麼a點:

a = 7 

與此相比,第二/ list情況,在那裏你居然在第一個對象上調用方法。 您沒有像在整數情況下那樣更新引用。

L = [1,2] 
M = L  # here you introduce a new name, referencing the same object as L. 
L.append(6) # update that same object. 
print(M)  # you print that same object 
0

M = L得到L現在是,在打印M之後,您將6追加到L上,但這隻會影響L,因爲M只收到了之前L的內容,但如果在追加後再次執行了M = L,則會打印列表的更新版本。基本上如果你得到一個變量yvariable,然後yvariable更新變量xvariable將不會更新,因爲你將不得不更新,因爲你將不得不再次更新xvariable,但這通常是由它自己發生的,如果一個循環正在使用

2

在這裏不同的情況不同的邏輯。就分配而言,列表和整數的工作方式完全相同。如果在你的第二個片段中,在倒數第二行中給L分配了一個不同的列表,這兩個變量將是不相關的。

但是名單有額外能力,其中整數和字符串不具備的,這是你可以對其進行修改。這就是你在這裏看到的。