简单了解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 相关文章推荐
Tensorflow之Saver的用法详解
Apr 23 Python
Python判断有效的数独算法示例
Feb 23 Python
Python函数和模块的使用总结
May 20 Python
python求最大值,不使用内置函数的实现方法
Jul 09 Python
在linux系统下安装python librtmp包的实现方法
Jul 22 Python
Python搭建代理IP池实现接口设置与整体调度
Oct 27 Python
tensorflow使用range_input_producer多线程读取数据实例
Jan 20 Python
关于Python解包知识点总结
May 05 Python
[原创]赚疯了!转手立赚800+?大佬的python「抢茅台脚本」使用教程
Jan 12 Python
Python 实现劳拉游戏的实例代码(四连环、重力四子棋)
Mar 03 Python
python 调用js的四种方式
Apr 11 Python
在前女友婚礼上,用Python破解了现场的WIFI还把名称改成了
May 28 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/09 PHP
使用PHP获取网络文件的实现代码
2010/01/01 PHP
php防止表单重复提交实例讲解
2019/02/11 PHP
MyEclipse取消验证Js的两种方法
2013/11/14 Javascript
html的DOM中document对象anchors集合用法实例
2015/01/21 Javascript
JavaScript实现的简单烟花特效代码
2015/10/20 Javascript
JS实现的表格操作类详解(添加,删除,排序,上移,下移)
2015/12/22 Javascript
ES6中如何使用Set和WeakSet
2016/03/10 Javascript
AngularJS 自定义指令详解及示例代码
2016/08/17 Javascript
Bootstrap Navbar Component实现响应式导航
2016/10/08 Javascript
jQuery学习笔记之入门
2016/12/14 Javascript
Javascript的this用法
2017/01/16 Javascript
JavaScript实现事件的中断传播和行为阻止方法示例
2017/01/20 Javascript
bootstrap3 dialog 更强大、更灵活的模态框
2017/04/20 Javascript
BootStrap Table复选框默认选中功能的实现代码(从数据库获取到对应的状态进行判断是否为选中状态)
2017/07/11 Javascript
Vue 进阶之路(三)
2019/04/18 Javascript
详解element上传组件before-remove钩子问题解决
2020/04/08 Javascript
JavaScript实现移动小精灵的案例代码
2020/12/12 Javascript
vue监听键盘事件的相关总结
2021/01/29 Vue.js
详解如何在python中读写和存储matlab的数据文件(*.mat)
2018/02/24 Python
Python操作word常见方法示例【win32com与docx模块】
2018/07/17 Python
pandas 根据列的值选取所有行的示例
2018/11/07 Python
Python实现字符串匹配的KMP算法
2019/04/04 Python
Python多线程threading模块用法实例分析
2019/05/22 Python
Python Numpy 自然数填充数组的实现
2019/11/28 Python
荷兰本土平价百货:HEMA
2017/10/23 全球购物
100%有机精油,美容油:House of Pure Essence
2018/10/30 全球购物
EJB的几种类型
2012/08/15 面试题
货代行业个人求职简历的自我评价
2013/10/22 职场文书
大学生创业计划书的格式要求
2013/12/29 职场文书
交通事故检查书范文
2014/01/30 职场文书
写给老婆的检讨书
2014/02/21 职场文书
2014年教师节演讲稿
2014/09/03 职场文书
党员个人年度总结
2015/02/14 职场文书
为什么MySQL选择Repeatable Read作为默认隔离级别
2021/07/26 MySQL
Pytorch中expand()的使用(扩展某个维度)
2022/07/15 Python