在我们现实世界中,存在一些不变的数据,比如身份证号,学号等等,
在程序里我们可以用 list 来存储一个班级里面所有学生的学号,
但 list 本身可以修改成员值,有可能在我们程序中不小心修改了 list
成员值导致业务逻辑错误,但在语法上并不存在问题,给程序员排查问题带来困难,
所以用 list 来存储学号并不能很好的描述现实世界,Python 提供了 tuple(元组)
数据类型来更好的描述这种现实世界的问题。
tuple 与 list 类似,也是一种有序的集合,不同之处在于 tuple 中的成员是不可改变的(不能添加新成员,不能删除已有的成员,不能修改里面的成员值)。
tuple 定义
元组使用小括号,列表使用方括号,元组创建很简单,只需要在括号中添加成员,
并使用逗号隔开即可。
students_id = (1001, 1002, 1003) print(students_id)
如果要定义一个空的 tuple,可以写成 ()。
如果要定义只有 1 个成员的 tuple,不能写成 (x) ,要写成 (x,),因为 ()
不但可以定义 tuple 类型,也可以作为运算符,比如 (1) 可以认为是对整数 1 做
() 运算,因为 () 的运算符优先级最高,Python 解释器会把 (1) 看作为对 1 做 () 运算。
tupleone = () # 空的 tuple print(tupleone) tupletwo = (1,) # 一个成员的 tuple print(tupletwo) tupletwo = (1) # int 类型的 1 print(tupletwo)
tuple 里面的成员不可修改,所以它没有 append,insert
等可以修改集合成员的函数,其它获取成员的函数和 list 相似,因为 tuple
不可变,所以代码更安全。如果可以,能用 tuple 代替 list 就尽量用 tuple。
深度剖析 tuple 内存模型
tuple 不可改变 ,也就是说 tuple 在刚开始定义的时候,
里面的成员就确定了,我们不能修改,添加,删除 tuple 成员,
但是如果 tuple 里面某个成员本身是可以改变的类型(比如 list),
我们可以改变这个变量成员本身内的值,注意:我们并没有改变 tuple 的成员,我们修改的是 tuple 成员中的成员。
mytuple = ("Hello", 250, [1, 2, 3]) mytuple[2][0] = "Python" # 可以 print(mytuple)
我们分析以上代码每一步在内存中是如何表示的,对于第一行代码 mytuple = ("Hello", 250, [1, 2, 3])
的内存模型。
对于第二行代码 mytuple[2][0] = "Python"
的内存模型。
通过上面对那两句代码的内存模型的图解析,我们可以清晰的看到无论是原来的
tuple (“Hello”, 250, [1, 2, 3]) 还是后面的 tuple (“Hello”, 250, [“Python”, 2, 3]),对于 tuple
本身的成员来说并没有变化,还是那些地址值,只是 tuple 的第二个成员 [1, 2, 3] 里面的成员发生了变化,
所以并没有违背 tuple 的规则(tuple 成员不可改变)。
tuple 里面的成员是用逗号隔开的,每个成员可以是任何数据类型,无论该成员多么复杂,对
tuple 来说只是一个成员。
mytuple = ("Hello", 250, [1, 2, 3]) print(len(mytuple)) # 3
本节重要知识点
tuple 里面有一个成员的定义方法。
弄明白 tuple 的内存模型。
本站部分资源来源于网络,仅限用于学习和研究目的,请勿用于其他用途。
如有侵权请发送邮件至1943759704@qq.com删除
码农资源网 » Python3的tuple类型