python中的列表和元组区别分析


Posted in Python onDecember 30, 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程序中实现分布式进程的教程
Apr 28 Python
利用python模拟sql语句对员工表格进行增删改查
Jul 05 Python
Django 添加静态文件的两种实现方法(必看篇)
Jul 14 Python
Python中 传递值 和 传递引用 的区别解析
Feb 22 Python
Python创建普通菜单示例【基于win32ui模块】
May 09 Python
Python之list对应元素求和的方法
Jun 28 Python
用Python实现BP神经网络(附代码)
Jul 10 Python
python系列 文件操作的代码
Oct 06 Python
Python class的继承方法代码实例
Feb 14 Python
python中的 zip函数详解及用法举例
Feb 16 Python
python GUI库图形界面开发之PyQt5动态加载QSS样式文件
Feb 25 Python
Python callable内置函数原理解析
Mar 05 Python
python实现xml转json文件的示例代码
Dec 30 #Python
python实现KNN近邻算法
Dec 30 #Python
python 实现逻辑回归
Dec 30 #Python
Python 随机按键模拟2小时
Dec 30 #Python
Python的scikit-image模块实例讲解
Dec 30 #Python
用Python实现职工信息管理系统
Dec 30 #Python
python实现双人五子棋(终端版)
Dec 30 #Python
You might like
PHP数据类型之整数类型、浮点数的介绍
2013/04/28 PHP
解析php中call_user_func_array的作用
2013/06/07 PHP
phplot生成图片类用法详解
2015/01/06 PHP
PHP中strncmp()函数比较两个字符串前2个字符是否相等的方法
2016/01/07 PHP
CodeIgniter钩子用法实例详解
2016/01/20 PHP
javascript parseInt() 函数的进制转换注意细节
2013/01/08 Javascript
浅析jQuery(function(){})与(function(){})(jQuery)之间的区别
2014/01/09 Javascript
三种检测iPhone/iPad设备方向的方法
2014/04/23 Javascript
js获取网页可见区域、正文以及屏幕分辨率的高度
2014/05/15 Javascript
原生javascript实现图片按钮切换
2015/01/12 Javascript
jQuery随手笔记之常用的jQuery操作DOM事件
2015/11/29 Javascript
JavaScript获取对象在页面中位置坐标的方法
2016/02/03 Javascript
JS实现左右无缝轮播图代码
2016/05/01 Javascript
针对后台列表table拖拽比较实用的jquery拖动排序
2016/10/10 Javascript
bootstrap Validator 模态框、jsp、表单验证 Ajax提交功能
2017/02/17 Javascript
深入理解Node module模块
2018/03/26 Javascript
微信小程序实现通过双向滑动缩放图片大小的方法
2018/12/30 Javascript
小程序从手动埋点到自动埋点的实现方法
2019/01/24 Javascript
[01:05:12]2014 DOTA2国际邀请赛中国区预选赛 TongFu VS CIS-GAME
2014/05/21 DOTA
python中from module import * 的一个坑
2014/07/20 Python
Python实现简单的代理服务器
2015/07/25 Python
python中正则的使用指南
2016/12/04 Python
Python 出现错误TypeError: ‘NoneType’ object is not iterable解决办法
2017/01/12 Python
PyChar学习教程之自定义文件与代码模板详解
2017/07/17 Python
如何在python字符串中输入纯粹的{}
2018/08/22 Python
python实现两个字典合并,两个list合并
2019/12/02 Python
基于python实现语音录入识别代码实例
2020/01/17 Python
python 在threading中如何处理主进程和子线程的关系
2020/04/25 Python
一个入门级python爬虫教程详解
2021/01/27 Python
HTML5的hidden属性兼容老浏览器的方法
2014/04/23 HTML / CSS
新西兰领先的鞋类和靴子网上商城:Merchant 1948
2017/09/08 全球购物
瑜伽国际:Yoga International
2018/04/18 全球购物
会计出纳岗位职责
2013/12/25 职场文书
放假通知范文
2015/04/14 职场文书
上班迟到检讨书
2015/05/06 职场文书
孔子观后感
2015/06/08 职场文书