简单了解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 相关文章推荐
python插入排序算法的实现代码
Nov 21 Python
详解Python使用simplejson模块解析JSON的方法
Mar 24 Python
使用apidoc管理RESTful风格Flask项目接口文档方法
Feb 07 Python
使用PM2+nginx部署python项目的方法示例
Nov 07 Python
使用Python计算玩彩票赢钱概率
Jun 26 Python
python实现日志按天分割
Jul 22 Python
Python集合基本概念与相关操作实例分析
Oct 30 Python
Python读取VOC中的xml目标框实例
Mar 10 Python
python对接ihuyi实现短信验证码发送
May 10 Python
详解python中groupby函数通俗易懂
May 14 Python
pycharm软件实现设置自动保存操作
Jun 08 Python
python中@property的作用和getter setter的解释
Dec 22 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与php MySQL 之间的关系
2009/07/17 PHP
PHP开发负载均衡指南
2010/07/17 PHP
PHP实现用户异地登录提醒功能的方法【基于thinkPHP框架】
2018/03/15 PHP
javascript 读取xml,写入xml 实现代码
2009/07/10 Javascript
js 分页全选或反选标识实现代码
2011/08/09 Javascript
js触发onchange事件的方法说明
2014/03/08 Javascript
node.js中的fs.readdir方法使用说明
2014/12/17 Javascript
使用javascript获取页面名称
2014/12/23 Javascript
jquery.cookie实现的客户端购物车操作实例
2015/12/24 Javascript
javascript断点调试心得分享
2016/04/23 Javascript
Bootstrap实现基于carousel.js框架的轮播图效果
2017/05/02 Javascript
详解webpack分离css单独打包
2017/06/21 Javascript
jQuery.Form实现Ajax上传文件同时设置headers的方法
2017/06/26 jQuery
详解使用nvm安装node.js
2017/07/18 Javascript
详解vue2 $watch要注意的问题
2017/09/08 Javascript
Vue二次封装axios为插件使用详解
2018/05/21 Javascript
mongodb初始化并使用node.js实现mongodb操作封装方法
2019/04/02 Javascript
JS开发 富文本编辑器TinyMCE详解
2019/07/19 Javascript
简单了解three.js 着色器材质
2020/08/03 Javascript
原生JavaScript实现留言板
2021/01/10 Javascript
[41:11]完美世界DOTA2联赛PWL S2 Inki vs Magma 第一场 11.22
2020/11/24 DOTA
python 用lambda函数替换for循环的方法
2018/06/09 Python
python得到qq句柄,并显示在前台的方法
2018/10/14 Python
Python模拟伯努利试验和二项分布代码实例
2020/05/27 Python
Python matplotlib可视化实例解析
2020/06/01 Python
Python中random模块常用方法的使用教程
2020/10/04 Python
Sentry错误日志监控使用方法解析
2020/11/12 Python
荟萃全球保健品:维他购
2018/05/09 全球购物
澳大利亚排名第一的狂热牛仔品牌:ONETEASPOON
2018/11/20 全球购物
美国在线和移动免费会员制批发零售商:Boxed(移动端的Costco)
2020/01/02 全球购物
在阿联酋购买翻新手机和平板电脑:Teckzu
2021/02/12 全球购物
清正廉洁演讲稿
2014/05/22 职场文书
2014年9.18纪念日演讲稿
2014/09/14 职场文书
会议通知范文
2015/04/15 职场文书
OpenCV-Python直方图均衡化实现图像去雾
2021/06/07 Python
一起来看看Vue的核心原理剖析
2022/03/24 Vue.js