简单了解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登陆asp网站页面的实现代码
Jan 14 Python
Python中用Spark模块的使用教程
Apr 13 Python
python压缩文件夹内所有文件为zip文件的方法
Jun 20 Python
基于Pandas读取csv文件Error的总结
Jun 15 Python
python获取微信小程序手机号并绑定遇到的坑
Nov 19 Python
python爬虫神器Pyppeteer入门及使用
Jul 13 Python
python实现PID算法及测试的例子
Aug 08 Python
Python箱型图绘制与特征值获取过程解析
Oct 22 Python
Windows10下Tensorflow2.0 安装及环境配置教程(图文)
Nov 21 Python
基于python traceback实现异常的获取与处理
Dec 13 Python
python中函数返回多个结果的实例方法
Dec 16 Python
python超详细实现完整学生成绩管理系统
Mar 17 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 实现进制转换(二进制、八进制、十六进制)互相转换实现代码
2010/10/22 PHP
PHP实现的MongoDB数据库操作类分享
2014/05/12 PHP
yii2分页之实现跳转到具体某页的实例代码
2016/06/02 PHP
Windows2003下php5.4安装配置教程(Apache2.4)
2016/06/30 PHP
PHP调用API接口实现天气查询功能的示例
2017/09/21 PHP
javascript globalStorage类代码
2009/06/04 Javascript
JS小框架 fly javascript framework
2009/11/26 Javascript
jquery获取自定义属性(attr和prop)实例介绍
2013/04/21 Javascript
javascript的switch用法注意事项分析
2015/02/02 Javascript
Javascript中的Callback方法浅析
2015/03/15 Javascript
jQuery插件Tmpl的简单使用方法
2015/04/27 Javascript
JS实现网页右侧带动画效果的伸缩窗口代码
2015/10/29 Javascript
vue.js通过自定义指令实现数据拉取更新的实现方法
2016/10/18 Javascript
深入理解JavaScript中的尾调用(Tail Call)
2017/02/07 Javascript
webpack教程之webpack.config.js配置文件
2017/07/05 Javascript
vuex 的简单使用
2018/03/22 Javascript
Bootstrap Table实现定时刷新数据的方法
2018/08/13 Javascript
Vue动态修改网页标题的方法及遇到问题
2019/06/09 Javascript
10款最好的Web开发的 Python 框架
2015/03/18 Python
Python中DJANGO简单测试实例
2015/05/11 Python
python学生信息管理系统
2018/03/13 Python
Python GUI布局尺寸适配方法
2018/10/11 Python
Pandas Shift函数的基础入门学习笔记
2018/11/16 Python
Python设置matplotlib.plot的坐标轴刻度间隔以及刻度范围
2019/06/25 Python
python GUI库图形界面开发之PyQt5布局控件QVBoxLayout详细使用方法与实例
2020/03/06 Python
Python中猜拳游戏与猜筛子游戏的实现方法
2020/09/04 Python
python实现人性化显示金额数字实例详解
2020/09/25 Python
Python Pygame实现俄罗斯方块
2021/02/19 Python
Html5中的桌面通知Notification的实现
2018/09/25 HTML / CSS
美国购买肉、鸭、家禽、鹅肝和熟食网站:D’Artagnan
2018/11/13 全球购物
恶意软件的定义
2014/11/12 面试题
外贸英语毕业生自荐信
2013/11/14 职场文书
平面设计专业大学生职业规划书
2014/03/12 职场文书
催款函范文
2015/06/24 职场文书
Python制作表白爱心合集
2022/01/22 Python
HTML页面点击按钮关闭页面的多种方式
2022/12/24 HTML / CSS