# 元組 Tuple
`Tuple`用`( )`表示,可以理解為一個固定列表,一旦初始化就不能再修改,只能對元素進行查詢。
## 特點
* 元素只讀,不支持對元素進行添加、修改(刪除)
* 代碼更安全
* 內置大多數方法和`List`差不多
## 基礎操作
```python
tuple1 = ('play', 'algorithm', 'python', 2019, 5.11, 'python')
# 空元組
empty_tup = ()
# 只有一個元素的元組,需要最后添加逗號,如果不加逗號,兩邊的括弧會被認為是數學公式中的小括號
one_item_tup = ('Tommy',)
print('元組示例:', tuple1)
print('空元組:', empty_tup)
print('只有一個元素的元組:', one_item_tup)
# 截取、*、判斷元素是否存在、迭代等操作同列表
print('截取、+、*、判斷元素是否存在、迭代等操作同列表')
```
**輸出結果**
```
元組示例: ('play', 'algorithm', 'python', 2019, 5.11, 'python')
空元組: ()
只有一個元素的元組: ('Tommy',)
截取、+、*、判斷元素是否存在、迭代等操作同列表
```
## 無關閉運算符
任何以逗號分隔的無符號對象,默認為元組
```python
m = 'play', 'algorithm', 'python', 18+6.6j, -4.24e93
x, y = 1, 2
print('m的值是:', m)
print('x, y的值是:', x, y)
```
**輸出結果**
```
m的值是: ('play', 'algorithm', 'python', (18+6.6j), -4.24e+93)
x, y的值是: 1 2
```
## 基礎函數
```Python
print('len(tuple) min(tuple) max(tuple)和列表用法相同')
print("Str對象轉為Tuple tuple('Tommy'):", tuple('Tommy'))
```
**輸出結果**
```
len(tuple) min(tuple) max(tuple)和列表用法相同
Str對象轉為Tuple tuple('Tommy'): ('T', 'o', 'm', 'm', 'y')
```
## 震驚,元組居然能改變?
先來看一個例子:
```python
tuple = ('play', 'algorithm', 'python', ['Tommy','ChaoChao'])
print('原始tuple為:', tuple)
# 修改Tommy為liuzhen153,ChaoChao為chaochaoZ
tuple[3][0] = 'liuzhen153'
tuple[3][1] = 'chaochaoZ'
print(tuple)
print('修改了某些內容的tuple為:', tuple)
# 在['liuzhen153', 'chaochaoZ']里新增wsqStar
tuple[3].append('wsqStar')
print('添加了某些內容的tuple為:', tuple)
```
**輸出結果**
```
原始tuple為: ('play', 'algorithm', 'python', ['Tommy', 'ChaoChao'])
('play', 'algorithm', 'python', ['liuzhen153', 'chaochaoZ'])
修改了某些內容的tuple為: ('play', 'algorithm', 'python', ['liuzhen153', 'chaochaoZ'])
添加了某些內容的tuple為: ('play', 'algorithm', 'python', ['liuzhen153', 'chaochaoZ', 'wsqStar'])
```
**分析**
這里看似元組中的元素改變了,其實可以看出,元組中的第四個元素是一個列表,我們改變的是列表中的值,元組所指的這個元素是『列表』并沒有改變。
這個涉及到`Python`中的可變對象和不可變對象,`List`是可變對象,`Tuple`便是不可變對象。
# 代碼庫地址
[https://github.com/liuzhen153/play-algorithm-python](https://github.com/liuzhen153/play-algorithm-python)