Python with 工作原理、装饰器、回收机制、内存管理机制、拷贝、作用域等(18)


16、tuple元组类型
元组 (tuple) 和列表(list)区别
想必大家都知道 , 在数据类型中有两个对象:元组 tuple 和列表 list。它们的写法和用法都十分相似 , 傻傻分不清楚 。可能有的同学就会疯狂的去网上查找它们之间的区别了 , 可是查到的无外乎有以下几种说法:
list 是可变的对象 , 元组 tuple 是不可变的对象!
由于 tuple 不可变 , 所以使用 tuple 可以使代码更安全!
其实在很多比较“资深”的编程语言里开始是没有元组的 , 比如:Java、C++、C# 等 , 但是由于元组的灵活和便捷性 , 最后这些编程语言也都纷纷加上了 。并且很多年轻的编程语言 、Scala 等 , 一开始就内置了元组类型 。
之所以元组这么受欢迎 , 其实最关键的一点是它的语法的灵活和便捷性 , 提高了编程体验 。其中最大的一个特性就是使函数可以返回多个值 , 这个特性很常用 。
函数返回()多个值
def func():value = "http://www.kingceram.com/post/hello"num = 520return value, numprint(type(func()))# print(func()[0])# helloprint(func()[1])# 520
从打印结果可以看出 , 这里返回值就是一个tuple!由于在语法上 , 返回一个tuple是可以省略括号的 , 而多个变量可以同时接收一个tuple , 按位置赋给对应的值 。
所以 , 的函数返回多值时 , 其实就是返回一个tuple 。是不是突然觉得 tuple 帮了大忙 , 使结果的获取更简单了呢?
tuple 不可变的好处
相对于 list 而言 , tuple 是不可变的 , 这使得它可以作为 dict 的 key , 或者扔进 set 里 , 而 list 则不行 。
tuple 放弃了对元素的增删(内存结构设计上变的更精简) , 换取的是性能上的提升:创建 tuple 比 list 要快 , 存储空间比 list 占用更小 。所以就出现了“能用 tuple 的地方就不用 list”的说法 。
多线程并发的时候 , tuple 是不需要加锁的 , 不用担心安全问题 , 编写也简单多了 。
元组到底可不可以被修改(元组的操作)
创建和访问一个元组如果创建一个空元组 , 直接使用小括号即可;如果要创建的元组中只有一个元素 , 要在它的后面加上一个逗号,
更新和删除元组
直接在同一个元组上更新是不可行的 , 但是可以通过拷贝现有的元组片段构造一个新的元组的方式解决 。
通过分片的方法让元组拆分成两部分 , 然后再使用连接操作符(+)合并成一个新元组 , 最后将原来的变量名(temp)指向连接好的新元组 。在这里就要注意了 , 逗号是必须的 , 小括号也是必须的!
__author__ = 'Administrator'# -*- coding:utf-8 -*-temp = ("龙猫","泰迪","叮当猫")temp = temp[:2] + ("小猪佩奇",)+temp[2:]print(temp)"""('龙猫', '泰迪', '小猪佩奇', '叮当猫')Process finished with exit code 0"""
删除元组中的元素:对于元组是不可变的原则来说 , 单独删除一个元素是不可能的 , 当然你可以利用切片的方式更新元组 , 间接的删除一个元素 。
__author__ = 'Administrator'# -*- coding:utf-8 -*-temp = ('龙猫', '泰迪', '小猪佩奇', '叮当猫')temp = temp[:2] + temp[3:]print(temp)"""('龙猫', '泰迪', '叮当猫')Process finished with exit code 0"""