简单了解python列表和元组的区别


Posted in Python onMay 14, 2020

列表(list)和元组(tuple)的一些基础

list和tuple都是一个可以放置任意数据类型的有序集合,都是既可以存放数字、字符串、对象等

简单了解python列表和元组的区别

list和tuple都支持负索引

In [8]: nums[-2]
Out[8]: 'ad'
In [9]: tp[-2]
Out[9]: '33'

list和tuple都支持切片操作

In [10]: nums[1:3]
Out[10]: [3, 'ad']
In [11]: tp[1:3]
Out[11]: (3, '33')

list和tuple都可以随意嵌套

In [12]: nums = [[1,2,3],['s','ff'],['34',3,5]]
In [13]: tp = ((23,4,'f'),45,'d',('dd',4,'ff'))

list和tuple的一些区别

列表是动态的,长度大小不固定,可以随意的增加、删除、修改元素元组是静态的,长度在初始化的时候就已经确定不能更改,更无法增加、删除、修改元素

简单了解python列表和元组的区别

从图中看出我们对list做出修改是成功的,但是对tuple修改的时候,确抛出了错误,那如果想对tuple做出改变该如何做呢?只能重新开辟一块内存,重新生成新到的tuple了。

简单了解python列表和元组的区别

从tuple的源码中也可以看出,只有两个自带的方法,一个是统计元素出现的次数一个是查询元素的索引。

list和tuple存储方式的差异

我们先来看个例子

In [19]: nums=['a',1,2]
In [20]: tp=('a',1,2)
In [21]: nums.__sizeof__()
Out[21]: 64
In [22]: tp.__sizeof__()
Out[22]: 48

这里构造了一个list和一个tuple。他们存储的内容是相同的,__sizeof__方法可以打印系统分配空间的大小。可以看到他们所占用的内存空间是不同的,存储的内容相同,但是list比tuple多占用了16自己的内存。

先来看一下一个数组的内存分配过程:

In [23]: l=[]

In [24]: l.__sizeof__() // 空列表分配了40字节的内存
Out[24]: 40

In [25]: l.append('a') // 增加了一个一个元素后,给列表分配了72字节的内存,一个字符8个字节
												// 那就是一次性分配了4个字符的内存空间

In [26]: l.__sizeof__()
Out[26]: 72

In [27]: l.append('b') // 再增加字符,占用内存不变

In [28]: l.__sizeof__()
Out[28]: 72

In [29]: l.append('c') // 再增加字符,占用内存不变

In [30]: l.__sizeof__()
Out[30]: 72

In [31]: l.append('d') // 再增加字符,占用内存不变

In [32]: l.__sizeof__()
Out[32]: 72

In [33]: l.append('e') // 再添加元素,内存不够,触发重新的内存分配

In [34]: l.__sizeof__()
Out[34]: 104

可以看出list为了能够实时追踪内存的使用情况,当空间不足时以及分配额外空间,额外的多分配了内存,而且还需要存储指针,指向对应的元素。

我们可以看到,为了减小每次增加 / 删减操作时空间分配的开销,Python 每次分配空间时都会额外多分配一些,这样的机制(over-allocating)保证了其操作的高效性:增加 / 删除的时间复杂度均为 O(1)。但是对于元组,情况就不同了。元组长度大小固定,元素不可变,所以存储空间固定。

所以说在存储大量的数据的时候,这种差异是需要考虑的,如果数据发生变更的可能性不大,就用元组存储,如果数据是需要频繁的进行数据的修改增加,就使用列表

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
可用于监控 mysql Master Slave 状态的python代码
Feb 10 Python
使用python编写脚本获取手机当前应用apk的信息
Jul 21 Python
Python fileinput模块使用实例
May 28 Python
Python通过select实现异步IO的方法
Jun 04 Python
基于Django的python验证码(实例讲解)
Oct 23 Python
python 字符串和整数的转换方法
Jun 25 Python
Python/Django后端使用PIL Image生成头像缩略图
Apr 30 Python
python实现简单井字棋游戏
Mar 04 Python
python字符串常用方法及文件简单读写的操作方法
Mar 04 Python
django美化后台django-suit的安装配置操作
Jul 12 Python
python virtualenv虚拟环境配置与使用教程详解
Jul 13 Python
详解Django中异步任务之django-celery
Nov 05 Python
Django 解决阿里云部署同步数据库报错的问题
May 14 #Python
Python参数传递实现过程及原理详解
May 14 #Python
Django模板标签{% for %}循环,获取制定条数据实例
May 14 #Python
详解python中groupby函数通俗易懂
May 14 #Python
django 解决扩展自带User表遇到的问题
May 14 #Python
解决更改AUTH_USER_MODEL后出现的问题
May 14 #Python
Python基于numpy模块实现回归预测
May 14 #Python
You might like
php字符串过滤与替换小结
2015/01/26 PHP
如何使用php脚本给html中引用的js和css路径打上版本号
2015/11/18 PHP
给WordPress的编辑后台添加提示框的代码实例分享
2015/12/25 PHP
JavaScript中继承的一些示例方法与属性参考
2010/08/07 Javascript
如何动态的导入js文件具体该怎么实现
2014/01/14 Javascript
不定义JQuery插件 不要说会JQuery
2016/03/07 Javascript
js小数计算小数点后显示多位小数的实现方法
2016/05/30 Javascript
bootstrap datetimepicker2.3.11时间插件使用
2016/11/19 Javascript
使用jQuery实现一个类似GridView的编辑,更新,取消和删除的功能
2017/03/15 Javascript
vue-router路由参数刷新消失的问题解决方法
2017/06/17 Javascript
JavaScript在控件上添加倒计时功能的实现代码
2017/07/04 Javascript
基于JavaScript实现无限加载瀑布流
2017/07/21 Javascript
7个好用的JavaScript技巧分享(译)
2019/05/07 Javascript
JS实现json数组排序操作实例分析
2019/10/28 Javascript
[02:26]2018DOTA2亚洲邀请赛赛前采访-Newbee篇
2018/04/03 DOTA
python获取文件后缀名及批量更新目录下文件后缀名的方法
2014/11/11 Python
python实现字符串和字典的转换
2018/09/29 Python
判断python对象是否可调用的三种方式及其区别详解
2019/01/31 Python
详解Python Matplotlib解决绘图X轴值不按数组排序问题
2019/08/05 Python
python图形界面开发之wxPython树控件使用方法详解
2020/02/24 Python
django 连接数据库出现1045错误的解决方式
2020/05/14 Python
Python创建临时文件和文件夹
2020/08/05 Python
CSS3的颜色渐变效果的示例代码
2017/09/29 HTML / CSS
浅谈HTML5新增及移除的元素
2016/06/27 HTML / CSS
HTML5中判断横屏竖屏的方法(移动端)
2016/08/04 HTML / CSS
H5混合开发app如何升级的方法
2018/01/10 HTML / CSS
YSL圣罗兰美妆英国官网:Yves Saint Laurent Beauty UK
2019/08/03 全球购物
PyQt 如何创建自定义QWidget
2021/03/24 Python
生物技术研究生自荐信
2013/11/12 职场文书
电台实习生求职信
2014/02/25 职场文书
完整版商业计划书
2014/09/15 职场文书
买房子个人收入证明
2014/10/12 职场文书
2015年小学校长工作总结
2015/05/19 职场文书
pytorch中F.avg_pool1d()和F.avg_pool2d()的使用操作
2021/05/22 Python
JavaScript前端面试组合函数
2022/06/21 Javascript
Vue深入理解插槽slot的使用
2022/08/05 Vue.js