列表(list)和元组(tuple)的一些基础
list和tuple都是一个可以放置任意数据类型的有序集合,都是既可以存放数字、字符串、对象等
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的一些区别
- 列表是动态的,长度大小不固定,可以随意的增加、删除、修改元素
- 元组是静态的,长度在初始化的时候就已经确定不能更改,更无法增加、删除、修改元素
从图中看出我们对list做出修改是成功的,但是对tuple修改的时候,确抛出了错误,那如果想对tuple做出改变该如何做呢?只能重新开辟一块内存,重新生成新到的tuple了。
从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,列表,元组,区别
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
更新日志
- 群星《戏梦》[FLAC/分轨][308.4MB]
- 魔兽世界永久60级什么时间开 永久60级开启时间介绍
- 魔兽世界奥卡兹岛血藻刷新点一览 wlk奥卡兹岛血藻刷新位置介绍
- 英雄联盟s14中国队种子怎么排名 s14中国队种子队伍排名一览
- 柏菲·梁玉嵘《知音梁品》限量开盘母带ORMCD[低速原抓WAV+CUE]
- [东升唱片]孙露《寂寞诱惑AQCD》高码率[FLAC]
- 群星-第8届2012十大发烧唱片精选HQ2CD[WAV+CUE]
- 九号公司两轮电动安全季行动圆满收官:为行业树立安全管理新标杆
- 创新驱动未来 中国移动5G云游戏深化智能运维应用推动行业发展
- 大型手游“帧数拉满” 骁龙8至尊版游戏表现强悍
- 谢金燕.2002-YOYO姊妹【华特】【WAV+CUE】
- 群星.1994-摇滚列车【音乐家】【WAV+CUE】
- 陈艾湄.1996-牵绊【巨翼】【WAV+CUE】
- 群星《无法抗拒的谎言 电视剧原声带》[320K/MP3][69.98MB]
- 群星《无法抗拒的谎言 电视剧原声带》[FLAC/分轨][372.04MB]