Python列表和元组的详细区别
文章目录
- Python列表和元组的详细区别
- 一、列表和元组的区别
- 二、列表(List)
- 三、元组(Tuple)
Python列表和元组的详细区别
一、列表和元组的区别
- 列表是动态数组,它们可变且可以重设长度(改变其内部元素的个数)。
- 元组是静态数组,它们不可变,且其内部数据一旦创建便无法改变。
- 元组缓存于Python运行时环境,这意味着我们每次使用元组时无须访问内核去分配内存。
这些区别结实率两者在设计哲学上的不同:
- 列表可被用于保存多个互相独立对象的数据集合
- 元组用于描述一个不会改变的事务的多个属性
二、列表(List)
列表一旦创建了我们就可以根据自己的需要随意改变它的内容:
>>> l = [1, 2, 3, 4, 5, 6]
>>> l[0] = l[2] * l[3]
>>> l
[12, 2, 3, 4, 5, 6]
另外我们可以给列边添加新的数据来增加其大小:
>>> len(l)
6
>>> l.append(7)
>>> l
[12, 2, 3, 4, 5, 6, 7]
>>> len(l)
7
这是因为动态数组支持resize操作,可以增加数组的容量。当一个大小为N的列表第一次需要添加数据时,Python会创建一个新的列表,足够放原来的N个元素以及额外添加的元素。不过,实际分配的并不是N+1个元素,而是M个元素,M > N, 这是为了给未来的添加预留空间。然后旧列表的数据被复制到新列表中,旧列表则会被销毁。从设计理念上来说,第一次添加可能是后续多次添加的开始,通过预留空间的做法,我们就可以减少这一分配空间的操作次数以及内存复制的次数。这点非常重要,因为内存复制可能非常的昂贵,特别是当列表大小开始增长以后。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GdQpXs7R-1599024560319)(./image/列表的添加操作.jpg)]
三、元组(Tuple)
元组是固定且不可改变的。这意味着一旦元组被创建,和列表不同,它的内容无法被修改或它的大小也无法被改变。
>>> t = (1, 2, 3, 4)
>>> t[0] = 5
Traceback (most recent call last):File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
虽然它们不支持改变大小,但是我们可以将两个元组合并成一个新元组。这一操作类似列表的resize操作,但我们不需要为新生的元组分配任何额外的空间:
>>> t1 = (1, 2, 3, 4)
>>> t2 = (5, 6, 7, 8)
>>> t1 + t2
(1, 2, 3, 4, 5, 6, 7, 8)
如果我们将其与列表的append操作比较,我们会看到它的复杂度是O(n)而不是列表的O(1)。这是因为对元组每添加一个新元素都会有分配和复制操作,而不是像列表那样仅在额外的空间耗尽时发生。所以元组并没有提供一个类似append的自增操作,任意两个元组相加始终返回一个新分配的元组。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nIsaGxH8-1599024560321)(./image/元组的合并操作.jpg)]
该网站为Python Tutor,一个能够对python运行内存可视化的网站,非常适合初学者研究,在运行过程中内存发生了什么。
元组的静态特性的另一个好处体现在一些会在Python后台发生的事情:资源缓存。
Python是一门垃圾收集语言,这意味着当一个变量不再被使用时,Python会将该变量使用的内存释放回操作系统,以供其他程序(变量)使用。然而,对于长度为1~20的元组,即使它们不在被使用,它们的空间也不会立刻还给系统,而是留待未来使用。这意味着当未来需要一个同样大小的新的元组时,我们不再需要向操作系统申请一块内存来存放数据,因为我们已经有了预留的空间。
这看上去可能是个细微的好处,但是实际上是元组一个很神奇的地方:它们可以被轻松快速地创建,因为它们可以避免跟操作系统频繁的打交道,而后者会花很长的时间。
下面举个例子会非常直观的说明问题
In [1]: %timeit l = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
93.7 ns ± 3.33 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)In [2]: %timeit t = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
18.5 ns ± 1.19 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
上面的示例中显示了初始化一个列表比初始化一个元组慢了5.1倍——如果这是在一个循环中,这点差别会很快的累加起来。
Python列表和元组的详细区别相关推荐
- Python列表和元组有什么区别?
1. 可变性 列表是可变的,元组是不可变的 2. 存储空间 列表占用的空间较大,而元组占用较小的空间(在存储相同数据的情况下) 原因: 1.在创建列表时,开辟的空间不仅用来存储列表数据对象,还有一部分 ...
- python有哪几种基本数据类型_Python最基本的数据类型以及对元组的介绍 Python 中列表和元组有哪些区别...
python的数据类型有哪些?道不同不相为谋,你讨厌我,我也未必喜欢你.各走各的人岂不是更潇洒何必咄咄逼人费了口舌也讨人嫌.你闲得慌,我可没空陪你. 1. 数字类型 Python数字类型主要包括int ...
- python列表和元组
python列表和元组 1.列表 列表是Python中内置的有序可变序列,列表的所有元素放在一对中括号"[]"中,并使用逗号隔开,列表中元素的类型可以相同也可以不同. (1)列表的 ...
- 十二、深入Python列表和元组
@Author :Runsen 上面四篇文章总结了Python的基础. 在Pthon中数据结构是非常重要的,所以下面将深入Pyhon数据结构 Python列表和元组总结 文章目录 什么是列表和元组 列 ...
- python两个元组相加_《第5章 Python 列表与元组》5.1.3 序列相加(Adding)!
<高中信息技术 Python编程> 教学案<第5章 Python 列表与元组> 5.1.3 序列相加(Adding)! 06:15 1 #使用加号可以进行序列的连接操作,输入如 ...
- python 列表、元组、集合、字典、循环遍历数据结构
python 列表.元组.集合.字典.数据结构的循环(整理自python文档) 列表-list-用方括号标注,逗号分隔的一组值 list 的 方法 对list添加.插入.删除.查找.排列.翻转 lis ...
- 任意长度的python列表最后一个元素索引_任意长度的 Python 列表、元组和字符串中最后一个元素的下标为 ________ 。_学小易找答案...
[填空题]已知 x = [3, 5, 7] ,那么表达式 x[10:] 的值为 ____________ . [填空题]表达式 [x for x in [1,2,3,4,5] if x<3] 的 ...
- 任意长度的python列表最后一个元素索引_任意长度的Python列表、元组和字符串中最后一个元素的下标为...
[填空题]Python内置函数__用来返回序列中的最小元素 [填空题]表达式 list(range(5)) 的值为 [填空题]表达式 int(4**0.5) 的值为 [填空题]表达式 3 or 5 的 ...
- 任意长度的python列表_任意长度的Python列表、元组和字符串中最后一个元素的索引为...
任意长度的Python列表.元组和字符串中最后一个元素的索引为 答:-1 什么是软件工程? 答:百度定义:软件工程是一门研究用工程化方法构建和维护有效的.实用的和高质量的软件的学科.它涉及程序设计语言 ...
最新文章
- 目前的计算机聪原理上讲,计算机组成原理-第23-24讲(第7章)+课件.ppt
- go map的定义和使用 键值对存储
- 从 idea打包工程到dos下命令运行
- CBA - Success function for Create Oppt call
- html发送qq邮件消息,Python3实现发送QQ邮件功能(html)_python
- RocketMQ源码解析-Consumer启动(2)
- 拒绝经验过剩,“程序员的工作只能是代码”?
- Python+OpenCV:尺度不变特征变换 (SIFT, Scale-Invariant Feature Transform)
- 用最简单的方式理解和使用ActivityMQ(基础入门)
- 什么是串口协议转换器?串口转换器有哪些特点?
- 安徽农业大学计算机考研分数线,安徽农业大学历年考研分数线汇总[2012-2021]
- 关于7z各种不能用的操作解决办法 7za 7z x Error: Can not open file as archive there is no such archive
- Vuforia AR开发详细教程
- 累了,困了,来看“MySQL”,让你梦回吹角连营
- 微商引流用什么礼品?从而形成裂变传播
- 控制QTextEdit中字体颜色
- Infortrend混合存储推动大体量血站IT系统全面升级
- 数据库实验七——视图、索引及数据安全
- 排查处理Failed to find latest MicroserviceVersionMeta, appId=chw-apaas, microserviceName=fileservice
- 2022年道路运输企业主要负责人操作证考试题及答案