>>> a = (1,2)
>>> a += (3,4)
>>> a
(1, 2, 3, 4)
>>>
,並用一個列表:如何是一個元組不可改變的,如果你可以添加到它(A + =(3,4))
>>> b = [1,2]
>>> b += [3,4]
>>> b
[1, 2, 3, 4]
>>>
作爲一個元組是不可變的和列表是可變的,怎麼樣我們可以解釋行爲嗎?
>>> a = (1,2)
>>> a += (3,4)
>>> a
(1, 2, 3, 4)
>>>
,並用一個列表:如何是一個元組不可改變的,如果你可以添加到它(A + =(3,4))
>>> b = [1,2]
>>> b += [3,4]
>>> b
[1, 2, 3, 4]
>>>
作爲一個元組是不可變的和列表是可變的,怎麼樣我們可以解釋行爲嗎?
元組是不可改變的類型,意味着您不能更改存儲在變量a
中的值。例如,執行以下操作
>>> a = (1, 2)
>>> a[0] = 3
拋出錯誤TypeError: 'tuple' object does not support item assignment
。
在另一方面,對於一個列表,
>>> a = [1, 2]
>>> a[0] = 3
這是完全有效的,因爲它是可變的。
你正在做的是重新賦值給變量名。
a = a + (3, 4)
它只是連接兩個並將其重新分配給變量a
。你實際上並沒有改變元組的值。
例如,string
是不可改變的,因此,
>>> name = "Foo"
>>> name[0] ='o'
如上拋出了一個類似的錯誤。但是,以下是重新分配並且完全有效。
>>> name = name + " Bar"
>>> name
'Foo Bar'
它只是一個串聯。
在這個例子中,你並沒有改變實際的元組,你只是改變變量a
指向的元組。在此示例中a += (3, 4)
與a = a + (3, 4)
相同。如果我們之前和之後的操作檢查a
的id
,我們可以看到的區別:列表中,從而改變其就地上
>>> a = (1, 2)
>>> id(a)
60516360
>>> a += (3, 4)
>>> id(a)
61179528
隨着名單,+=
電話.extend()
。
>>> b = [1, 2]
>>> id(b)
62480328
>>> b += [3, 4]
>>> id(b)
62480328
注意的b
的id
手術後不會改變。
我覺得'+ ='定義了一個新的元組並返回它(即不會改變現有的元組)。關鍵不在於你所看到的價值觀,而在於底層對象是否相同。通過列表,同一個對象被添加到(不會創建一個新對象)。 – mjgpy3 2013-04-28 04:23:43
數字也是不可變的,但'a = 2; a + = 2'的作品。 – 2013-04-28 04:26:46
@cool_n_curious雖然被警告,但這對元組是一個代價高昂的操作。列表可以簡單地擴展自己,而元組必須在每次執行此操作時構造一個全新的元組,所以只要需要執行此操作就可以使用列表 – jamylak 2013-04-28 04:56:55