一、前言

想必大家都知道,在Python数据类型中有两个对象:元组 tuple 和列表 list 。

它们的写法和用法都十分相似,傻傻分不清楚。可能有的同学就会疯狂的去网上查找它们之间的区别了,可是查到的无外乎有以下几种说法:

list 是可变的对象,元组 tuple 是不可变的对象!

由于 tuple 不可变,所以使用 tuple 可以使代码更安全!等等 ...

但是 tuple 究竟有什么用呢,到头来还是不知道。

二、tuple

其实在很多比较“资深”的编程语言里开始是没有元组的,比如:Java、C++、C# 等,但是由于元组的灵活和便捷性,最后这些编程语言也都纷纷加上了。并且很多年轻的编程语言 Python、Scala 等,一开始就内置了元组类型。

之所以元组这么受欢迎,其实最关键的一点是它的语法的灵活和便捷性,提高了编程体验。其中最大的一个特性就是使函数可以返回多个值,这个特性很常用。

1. 函数返回(return)多个值

函数返回多个值?对,你没有听错。函数是可以返回多个值的。如:

非常简单,就是一个返回坐标值(x , y)的函数,我们同时获取了多个值 x 和 y 。

但是这和 tuple元组有什么关系了?

其实这里存在一个假象,Python函数返回的值本质上还是一个单值,看下面代码:

从打印结果可以看出,这里返回值就是一个tuple!由于在语法上,返回一个tuple是可以省略括号的,而多个变量可以同时接收一个tuple,按位置赋给对应的值。

所以,Python的函数返回多值时,其实就是返回一个tuple。是不是突然觉得 tuple 帮了大忙,使结果的获取更简单了呢?

2. tuple 不可变的好处

相对于 list 而言,tuple 是不可变的,这使得它可以作为 dict 的 key,或者扔进 set 里,而 list 则不行。

tuple 放弃了对元素的增删(内存结构设计上变的更精简),换取的是性能上的提升:创建 tuple 比 list 要快,存储空间比 list 占用更小。所以就出现了“能用 tuple 的地方就不用 list”的说法。

多线程并发的时候,tuple 是不需要加锁的,不用担心安全问题,编写也简单多了。

二、元组到底可不可以被修改

1、创建和访问一个元组如果创建一个空元组,直接使用小括号即可;
如果要创建的元组中只有一个元素,要在它的后面加上一个逗号‘,’。

>>> temp = ()
>>> type(temp)<class 'tuple'>>>> temp = (1,)
>>> type(temp)<class 'tuple'>>>> temp = (1)
>>> type(temp)<class 'int'>>>> 8 * (8)64
>>> 8 * (8,)(8, 8, 8, 8, 8, 8, 8, 8)

元组里只有一个元素的时候,逗号(,)非常重要

2、更新和删除元组

直接在同一个元组上更新是不可行的,但是可以通过拷贝现有的元组片段构造一个新的元组的方式解决。
通过分片的方法让元组拆分成两部分,然后再使用连接操作符(+)合并成一个新元组,最后将原来的变量名(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
"""

在日常中很少用del去删除整个元组,因为Python的回收机制会在这个元组不再被使用的时候自动删除。

__author__ = 'Administrator'# -*- coding:utf-8 -*-temp = ('龙猫', '泰迪', '小猪佩奇', '叮当猫')
del temp
print(temp)
"""
Traceback (most recent call last):File "F:/python_progrom/test.py", line 7, in <module>print(temp)
NameError: name 'temp' is not definedProcess finished with exit code 0
"""

最后成员关系操作符 in 和 not in 也可以直接应用在元组上,这跟列表是一样的。

__author__ = 'Administrator'# -*- coding:utf-8 -*-temp = ('龙猫', '泰迪', '小猪佩奇', '叮当猫')
a ="泰迪"
c = ('泰迪', '小猪佩奇')
b = a in temp
d =c in temp
f =c not in temp
print(b)
print(d)
print(f)
"""
True
False
TrueProcess finished with exit code 0
"""

python 元组(tuple)和列表(list)区别相关推荐

  1. Python 元组tuple - Python零基础入门教程

    目录 一.Python 元组 tuple 简介 二.Python 元组 tuple 定义 三.Python 元组 tuple 数据查询 四.Python 元组 tuple 不支持删除/修改数据 五.P ...

  2. python元组(tuple)使用示例+常用方法+列表(list)和元组(tuple)的异同?

    python元组(tuple)使用示例+常用方法+列表(list)和元组(tuple)的异同? 元组(tuple) # 元组类似列表,元组里面的元素也是进行索引计算. # 列表里面的元素的值可以修改, ...

  3. [转载] python 元组tuple - python基础入门(14)

    参考链接: Python元组Tuple 目录 一.元组tuple定义 二.元组tuple查询 三.元组tuple不支持删除/修改数据 四.元组tuple与列表list的相互转换 五.重点总结 在上一篇 ...

  4. Python元组tuple(不可变)

    Python元组Tuple(不可变): 元组的特点: 1.元组的初始化: tuple = (1, )  #元组只有一个元素的话,初始化时要加,否则当做元素的普通变量类型处理 tuple = (1, 2 ...

  5. [转载] python元组 tuple

    参考链接: Python元组Tuple 类型特点:可以存放多个. 可以重复的,有顺序的数据,数据不可变. 如果项目中需要定义多个数据到一个变量中存放 存放的数据,在项目运行过程中,会发生数据的增加.修 ...

  6. python基础-变量,变量类型,字符串str,元组tuple,列表list,字典dict操作详解(超详细)

    python基础--变量 (文章较长,若需要单独看某一个点,可点击目录直接跳转) 文章目录 python基础--变量 1. 变量 2. 变量类型 2.1数字类型 2.2 字符串 2.3 列表 2.4 ...

  7. Python 元组(tuple)

    元组(tuple)是 python中另一个重要的序列结构,和列表类似,元组也是由一系列按特定顺序排序的元素组成. 元组和列表(list)的不同之处在于: 列表的元素是可以更改的,包括修改元素值,删除和 ...

  8. Python 元组(Tuple)操作详解

    Python的元组与列表类似,不同之处在于元组的元素不能修改,元组使用小括号,列表使用方括号,元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可 一.创建元组 复制代码 代码如下: tup1 ...

  9. python元组添加元素_Python 列表,for循环,元组的使用(修改、添加、删除、排序、切片)...

    Python 列表(List) Python的基本数据类型有整数,浮点数,布尔,字符串,它们是最基本的数据.在实际编程中,我们要经常组织由很多基本数据组成的集合,这些集合的不同组织方式就是:数据结构, ...

最新文章

  1. 什么是整型?Python整型详细介绍
  2. linux实战案例作业(1)
  3. 接口之间传递inputstream_接口测试 | 接口测试入门
  4. ubuntu copy命令
  5. 【LeetCode笔记】2. 两数相加(JAVA、链表)
  6. 堡垒之夜安装包删除_堡垒之夜安装不了怎么办_常见安装下载问题解决方法_3DM网游...
  7. 无穷分数java_java – 如何NaN和无穷大的浮动或双倍存储在内存?
  8. mac下安装nginx+php+mysql
  9. 音乐flac怎么转为mp3?
  10. DeepSORT的改进
  11. IDEA中Dubugger设置
  12. Unity 特效:Particle System(粒子系统)
  13. 如何适配处理iphoneX底部的横条 ?(转)
  14. 浏览器导出SSL证书
  15. 双极性(相)四线步进电机TC1508S(双通道直流马达驱动器)
  16. 每日安全简讯20160720
  17. Opencv 图片处理
  18. 机器人关节摩擦力的变化规律
  19. 我家离猪窝,只差一个机器人的距离
  20. Extreme Table简介及使用

热门文章

  1. 怎样把照片中的头像扶正_特别亲子照,一家三口、四口微信头像,温馨幸福
  2. 阿里云Docker Registry 操作指南
  3. postcss安装和使用(详细)
  4. 实验:利用三层交换机连接局域网与广域网的实验,可跟做
  5. Linux用户和组命令详解(groupadd、useradd)
  6. openGauss学习之旅——基本入手
  7. 力扣算法刷题Day30|回溯:重新安排行程 N皇后 解数独
  8. Sublime Text激活
  9. Matlab使用的一点小体会(不定时扩充修缮,琐碎东西存档)
  10. 六十星系之18武曲七杀坐卯酉