2016-10-20 50 views
3
a = [0] 
b = a 
a[0] = 1 

print b 

這將打印1,爲什麼這項工作的列表,但不爲int或浮動的或類似的東西?爲什麼變量賦值在列表中像這樣工作?

+2

有問題,你可以試試這個'B'是'了'參考。你能舉個例子說明你如何爲整數或浮點數做這個事情? –

+2

因爲整數和浮點數不支持'a [0] = 1',或其他任何會使整數或浮點數變異的東西。 – user2357112

+3

'print b'不打印1,它打印'[1]' – sisanared

回答

1

Python中的所有類型都是引用類型。 訣竅是有些是可變的,有些不是。 int s和 float s是不可變的。值42不能改變。每次你給一個變量賦一個新值時,它都指向一個新值。

ab都指代您的代碼中相同的數組。這就是爲什麼當您使用一個標識符修改數組時,您會看到使用其他標識符訪問該值時反映的變化。

+2

對不起,但可變性與它無關。即使將OP的「0」和「1」替換爲諸如「[]」和「[[]]」之類的列表,效果仍然存在。 –

+0

@RaymondHettinger - 你說得對。把它拉出來。我睡眠不足的想法試圖去某個地方,這是沒有意義的。 –

+0

不用擔心。它發生在最好的:-) –

3
a = [0] # create an int, create a container referencing the int, let "a" reference the container 

b = a  # let "b" reference the same container as "a" 
a[0] = 1 # create another int, let container "a" reference the new int 

print b # "b" and "a" refer to the same container with the new contents 

看到這個Python Tutor visualization爲更清楚地瞭解發生了什麼。

0

,如果你是複製一個列表

>>> a = [0] 
>>> b = a[:] 
>>> a[0] = 1 
>>> a 
[1] 
>>> b 
[0] 
相關問題