2015-11-01 60 views
3

我剛剛開始學習和閱讀關於Python的知識,並且在閱讀本書的前幾章時遇到了麻煩。在翻譯過程中,我遇到了這個問題。Python不同的結果代碼

這是我的問題,這兩個表達式的值是如何不同的。在第一個示例中,y的值在更改x後保持不變,而在下一個示例中,當更改x時,它也會更改值y

實施例1:

>>> x = 5 
>>> y = x 
>>> x += 1 
>>> x 
6 
>>> y 
5 

實施例:2個

>>> x = [5] 
>>> y = x 
>>> x[0] = 6 
>>> x 
[6] 
>>> y 
[6] 
+2

'x + 1'或'x + = 1'? (只是一個提示,而不是問題) –

+1

是的,X + = 1抱歉編輯。 – user3400748

回答

4

及其約python reference。當

a = [2] 
b = a 

這裏a,和b都引用於[2]。您可以檢查它由id

>>>id(a) 
3066750252L 

>>>id(b) 
3066750252L 

兩者都是相同的ID。所以a.appendb.append將影響ab。那是[2]。這是在mutable objects.So a[0]=6情況下會影響整數b also.In情況下,也不會影響,因爲,intimmutable object.So

>>>a = 2 
>>>id(a) 
164911268 
>>>a = a + 1 
>>>a 
3 
>>>id(a) 
164911256 

這裏id changed.That意味着新int對象被創建3。它現在由可變a引用。

希望這有助於

3

所討論的兩個對象的值不同,其一,int不變而其他的list是可變的。

通過x, y5創建兩個不同的爲同一值5分配這兩個名字。當您執行操作:

In [1]: x = y = 5 

In [2]: x = x + 1 

In [3]: x 
Out[3]: 6 

In [4]: y 
Out[4]: 5 

x+1返回一個新int對象,因爲你不能改變一個int值。

list另一方面類型是可變的。因此,當您創建引用相同列表的兩個名稱,然後通過x[0] = 1分配更改其內容的值時,它只會影響x引用的列表,並且不會創建新列表。因此,這種分配的結果是可見的y也因爲它們引用同一個可變對象:

In [11]: x = y = [5] 

In [12]: x[0] = 1 

In [13]: x 
Out[13]: [1] 

In [14]: y 
Out[14]: [1] 

注意添加x = x + [1]將創建一個新的列表,你與x[0]=1做的是簡單改變內容。請參閱this演示文稿以獲得更完整的報道。

相關問題