一、什么是元組
元組是Python中的另一種標(biāo)準序列類型,與列表和字符串類似。元組也是有序的,可以包含任意類型的元素,而且可以通過索引和切片進行訪問。
二、元組的組成
元組由多個用逗號隔開的值組成,例如:
>>>t = 12345, 54321, 'hello!' >>>t[0] 12345 >>>t (12345, 54321, 'hello!') >>># Tuples may be nested: ...u = t, (1, 2, 3, 4, 5) >>>u ((12345, 54321, 'hello!'), (1, 2, 3, 4, 5)) >>># Tuples are immutable: ...t[0] = 88888 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'tuple' object does not support item assignment >>># but they can contain mutable objects: ...v = ([1, 2, 3], [3, 2, 1]) >>>v ([1, 2, 3], [3, 2, 1])
可以用多種方式構(gòu)建元組:
- 使用一對圓括號來表示空元組: ();
- 使用一個后綴的逗號來表示單元組: a, 或 (a,);
- 使用以逗號分隔的多個項: a, b, c or (a, b, c);
- 使用內(nèi)置的 tuple(): tuple() 或 tuple(iterable)。
元組在輸出時通常要由圓括號括起來,以正確解釋嵌套的元組。輸入時,圓括號可以省略,但在某些情況下是必需的。不允許為元組中的單個元素賦值,當(dāng)然,可以創(chuàng)建含列表等可變對象的元組。
注意:元組是不可變的,一旦創(chuàng)建就不能修改元組中的元素。所謂元組的不可變指的是元組所指向的內(nèi)存中的內(nèi)容不可變。但是,如果元組中包含可變對象(比如列表),則可以修改列表內(nèi)部的元素。
>>> tup = ('W', '3', 'C', 's', 'c', 'h','o','o','l') >>> tup[0] = 'w' # 不支持修改元素 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'tuple' object does not support item assignment >>> id(tup) # 查看內(nèi)存地址 4440687904 >>> tup = (1,2,3) >>> id(tup) 4441088800 # 內(nèi)存地址不一樣了
構(gòu)造 0 個或 1 個元素的元組比較特殊,為了適應(yīng)這種情況,對句法有一些額外的改變。用一對空圓括號就可以創(chuàng)建空元組;只有一個元素的元組可以通過在這個元素后添加逗號來構(gòu)建(圓括號里只有一個值的話不夠明確)。雖不美觀但是有效。例如:
>>>empty = () >>>singleton = 'hello', # <-- note trailing comma >>>len(empty) 0 >>>len(singleton) 1 >>>singleton ('hello',)
三、序列解包
- 語句t = 12345, 54321, ‘hello!’是 元組打包 的例子,值12345, 54321 和 ‘hello!’一起被打包進元組;
- 序列解包用于將一個序列解壓成多個變量。例如:
>>>x, y, z = t;
- 序列解包時,左側(cè)變量與右側(cè)序列元素的數(shù)量應(yīng)相等。
注意:多重賦值其實只是元組打包和序列解包的組合。