Python順序集合之 tuple

Pyerlife發表於2016-06-29

慕課網《Python 入門》學習筆記

 

1、tuple特性

tuple是另一種有序的列表,中文翻譯為“ 元組 ”。tuple 和 list 非常類似,但是,tuple一旦建立完畢,就不能修改了

 >>> t = ('Adam', 'Lisa', 'Bart') 

建立tuple和建立list唯一不同之處是用( )替代了[ ]

現在,這個 t 就不能改變了,tuple沒有 append()方法,也沒有insert()和pop()方法。所以,新元素沒法直接往 tuple 中新增,在 tuple刪除元素 也不行。

獲取 tuple 元素的方式和 list 是一模一樣的,可以正常使用 t[0],t[-1]等索引方式訪問元素,但是不能賦值成別的元素

 >>> t[0] = 'Paul'
 Traceback (most recent call last):
 File "", line 1, in
 TypeError: 'tuple' object does not support item assignment

2、建立單元素tuple

包含 0 個元素的 tuple,也就是空tuple,直接用 ()表示:

 >>> t = ()
 >>> print t
 ()

建立包含1個元素的 tuple 呢?來試試:

 >>> t = (1)
 >>> print t
 1

因為()既可以表示tuple,又可以作為括號表示運算時的優先順序,結果 (1) 被Python直譯器計算出結果 1,導致我們得到的不是tuple,而是整數 1。

正是因為用()定義單元素的tuple有歧義,所以 Python 規定,單元素 tuple 要多加一個逗號“,”,這樣就避免了歧義:

 >>> t = (1,)
 >>> print t
 (1,)

Python在列印單元素tuple時,也自動新增了一個“,”,為了更明確地告訴你這是一個tuple。

3、"可變”的tuple

tuple也是“可變”的,如:

 >>> t = ('a', 'b', ['A', 'B'])

注意到 t 有 3 個元素:'a','b'和一個list:['A', 'B']。list作為一個整體是tuple的第3個元素。list物件可以通過 t[2] 拿到:

 >>> L = t[2]

然後,我們把list的兩個元素改一改:

 >>> L[0] = 'X'
 >>> L[1] = 'Y'

再看看tuple的內容:

 >>> print t
 ('a', 'b', ['X', 'Y'])
 
表面上看,tuple的元素確實變了,但其實變的不是 tuple 的元素,而是list的元素。
tuple一開始指向的list並沒有改成別的list,所以,tuple所謂的“不變”是說,tuple的每個元素,指向永遠不變。即指向'a',就不能改成指向'b',指向一個list,就不能改成指向其他物件,但指向的這個list本身是可變的!
理解了“指向不變”後,要建立一個內容也不變的tuple怎麼做?那就必須保證tuple的每一個元素本身也不能變。

相關文章