简单了解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 相关文章推荐
django自定义Field实现一个字段存储以逗号分隔的字符串
Apr 27 Python
详解Python中的正则表达式的用法
Apr 09 Python
Python通过matplotlib画双层饼图及环形图简单示例
Dec 15 Python
对Python中数组的几种使用方法总结
Jun 28 Python
python读取LMDB中图像的方法
Jul 02 Python
python使用threading.Condition交替打印两个字符
May 07 Python
让你Python到很爽的加速递归函数的装饰器
May 26 Python
Python批量修改图片分辨率的实例代码
Jul 04 Python
jupyter notebook 实现matplotlib图动态刷新
Apr 22 Python
使用Python matplotlib作图时,设置横纵坐标轴数值以百分比(%)显示
May 16 Python
只需要这一行代码就能让python计算速度提高十倍
May 24 Python
Python正则表达式中flags参数的实例详解
Apr 01 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
一个可以找出源代码中所有中文的工具
2006/10/25 PHP
一贴学会PHP 新手入门教程
2009/08/03 PHP
php_xmlhttp 乱码问题解决方法
2009/08/07 PHP
深入PHP变量存储的详解
2013/06/13 PHP
九个你必须知道而且又很好用的php函数和特点
2013/08/08 PHP
在Laravel5.6中使用Swoole的协程数据库查询
2018/06/15 PHP
Javascript 函数中的参数使用分析
2010/03/27 Javascript
在iframe里的页面编写js,实现在父窗口上创建动画效果展开和收缩的div(不变动iframe父窗口代码)
2011/12/20 Javascript
JS写的贪吃蛇游戏(个人练习)
2013/07/08 Javascript
JavaScript中Math对象方法使用概述
2014/01/02 Javascript
Javascript中的几种URL编码方法比较
2015/01/23 Javascript
TypeScript具有的几个不同特质
2015/04/07 Javascript
在JavaScript中处理时间之getHours()方法的使用
2015/06/10 Javascript
jQuery ajax全局函数处理session过期后的ajax跳转问题
2016/06/03 Javascript
Bootstrap和Java分页实例第一篇
2016/12/23 Javascript
JS简单验证上传文件类型的方法
2017/04/17 Javascript
JS弹窗 JS弹出DIV并使整个页面背景变暗功能的实现代码
2018/04/21 Javascript
Node.js Buffer用法解读
2018/05/18 Javascript
TypeScript开发Node.js程序的方法
2019/04/30 Javascript
用 js 写一个 js 解释器过程详解
2019/08/02 Javascript
[03:09]显微镜下的DOTA2第一期——带你走进华丽的DOTA2世界
2014/06/20 DOTA
python实现的简单猜数字游戏
2015/04/04 Python
Python的__builtin__模块中的一些要点知识
2015/05/02 Python
使用Python简单的实现树莓派的WEB控制
2016/02/18 Python
python 写入csv乱码问题解决方法
2016/10/23 Python
Python实现excel转sqlite的方法
2017/07/17 Python
使用pandas实现csv/excel sheet互相转换的方法
2018/12/10 Python
Python给定一个句子倒序输出单词以及字母的方法
2018/12/20 Python
django 快速启动数据库客户端程序的方法示例
2019/08/16 Python
Python3.7安装keras和TensorFlow的教程图解
2020/06/18 Python
解决pytorch下出现multi-target not supported at的一种可能原因
2021/02/06 Python
html5调用app分享功能示例(WebViewJavascriptBridge)
2018/03/21 HTML / CSS
轻松制作精彩视频:Animoto
2018/09/19 全球购物
法国一家多品牌成衣精品中/高档商店:Graduate Store
2019/08/28 全球购物
研讨会主持词
2014/04/02 职场文书
情况说明书格式及范文
2019/06/24 职场文书