元组:
1.定义:可以按照顺序存储一定数量对象的对象,不可变
2.不可变;
元组与多数python集合(列表、字典、集,等等)一样,保存的是对象的引用。如果引用的元素是可变的,即便元组本身不可变,但是元素依然可变。也就是说元组的不可变性其实是指tuple数据结构的物理内容(即保存的引用)不可变,与引用的对象无关。
t=(1,2,[1,2])
print(id(t[-1]))
t[2].append(3)
print(t)
print(id(t[-1]))
2078751220360
(1, 2, [1, 2, 3])
2078751220360
"t[-1]中对象的地址没有变"
3.不可变优势:
用作字典类型的键,可以用作其他对象拥有哈希值的地方,不可变的类型都是可哈希的。
为什么键必须是可哈希的?解释器调用哈希函数,根据字典中键的值来计算存储你的数据的位置。如果键是可变对象,它的值可改变。如果键发生变化,哈希函数会映射到不同的地址来存储数据。如果这样的情况发生,哈希函数就不可能可靠地存储或获取相关的数据。选择可哈希的键的原因就是因为它们的值不能改变。
"元组是不可变的,数值也是不可变的,所以键是不可变的因此可以希哈,作为字典的键"
a={(1,2,3):"早睡早起"}
print(a[(1,2,3)])
早睡早起
Process finished with exit code 0
4.作用:用来存储数据,不能存储行为。如果需要某行为来操纵元组,必须将元组传递给函数来执行这一个操作。
5.创建:
方式一: a=1,2,3
方式二 a=(1,2,3)
多元赋值实质也是元组的运用
x,y,z=1,2,3
x,y,z=(1,2,3)
(x,y,z)=(1,2,3)
解包:
a=(1,2,3)
x,y,z=a
"这个过程又称为元组解包,变量个数于元组内,值个数要相同"
print(x,y,z)
6.访问:切片
print(a[0:2])
(1, 2)
返回依然是元组类型
7.缺点:可读性差,无法通过阅读代码知道某个元组某个位置数据代表什么
比如上个例子中,a的第一个元素0,不知道它代表什么意思,质能通过所赋值的变量名称来猜测,比如所赋给的x。可能需要追溯到元组声明地方周到它含义
8.当知道所有值都会立即用到并且是通过解包形式访问其中的值时候,使用元组效果最好。