# 元组 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)