1、tuple是另一種有序的列表,中文翻譯為"元祖"。tuple和list非常相似,但是tuple一旦創建之后就不能
在修改了,創建tuple如下所示:
tup = ('Adam', 'Make', 'Paul')
創建tuple和創建list唯一不同之處是用( )替代了[ ]。
2、創建單元素tuple
tuple和list一樣,可以包含 0 個、1個和任意多個元素。
tup = (1,); # 創建了一個只有一個元素1的tuple
不可直接 tup = (1)。因為()既可以表示tuple,又可以作為括號表示運算時的優先級,結果 (1) 被Python解
釋器計算出結果 1,導致我們得到的不是tuple,而是整數 1。
正是因為用()定義單元素的tuple有歧義,所以 Python 規定,單元素 tuple 要多加一個逗號“,”,這樣就
避免了歧義。
多元素 tuple 加不加這個額外的","效果是一樣的。
3、創建"可變"tuple
前面說了tuple一旦創建就不能修改。現在,我們來看一個"可變"的tuple:
1 t = ('a', 'b', ['A', 'B']) 2 list = t[2] 3 list[0] = 'X' 4 lisy[1] = 'Y' 5 6 print t 7 8 ('a', 'b', ['X', 'Y'])
注意到 t 有 3 個元素:'a','b'和一個list:['A', 'B']。list作為一個整體是tuple的第3個元素。list對象可以
通過 t[2] 拿到,然后可以對list進行修改。
不是說tuple一旦定義后就不可變了嗎?怎么現在又變了?
別急,我們先看看定義的時候tuple包含的3個元素:
當我們把list的元素'A'和'B'修改為'X'和'Y'后,tuple變為:
表面上看,tuple的元素確實變了,但其實變的不是 tuple 的元素,而是list的元素。tuple一開始指向的
list並沒有改成別的list,所以,tuple所謂的“不變”是說,tuple的每個元素,指向永遠不變。即指
向'a',就不能改成指向'b',指向一個list,就不能改成指向其他對象,但指向的這個list本身是可變的!