美文网首页
python中的列表和元组都有哪些区别

python中的列表和元组都有哪些区别

作者: 测试轩 | 来源:发表于2020-04-09 21:35 被阅读0次

列表(list)和元组(tuple)的一些基础

list和tuple都是一个可以放置任意数据类型的有序集合,都是既可以存放数字、字符串、对象等


file

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的一些区别

  • 列表是动态的,长度大小不固定,可以随意的增加、删除、修改元素
  • 元组是静态的,长度在初始化的时候就已经确定不能更改,更无法增加、删除、修改元素
file

从图中看出我们对list做出修改是成功的,但是对tuple修改的时候,确抛出了错误,那如果想对tuple做出改变该如何做呢?只能重新开辟一块内存,重新生成新到的tuple了。

file

从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中的列表和元组都有哪些区别

    列表(list)和元组(tuple)的一些基础 list和tuple都是一个可以放置任意数据类型的有序集合,都是既...

  • Python TUPLE - 打包,解包,比较,切片,删除,键

    什么是Python的中的元组? 元组就像一系列不可变Python对象的列表。列表和元组之间的区别在于列表在方括号中...

  • Python经典面试题

    Python中5种标准数据类型有哪些? Python中的元组和列表有什么区别? 如何从字典中获得所有的keys? ...

  • Python元组

    python元组元组和列表的区别在于元组中的元素不能修改 创建元组创建元组用() tuple = ()当元组里只包...

  • 2018-01-13 python学习第一天

    第二章 列表和元组 列表和元组区别:列表可以修改,二元组则不能 python的6种內建的序列: 列表和元组,字符串...

  • python 元组

    python元组 元组和列表的区别在于元组中的元素不能修改 创建元组 创建元组用() 当元组里只包括一个元素时一定...

  • python元组

    python元组 元组和列表的区别在于元组中的元素不能修改 创建元组 创建元组用() 当元组里只包括一个元素时一定...

  • Python入门笔记(一):列表和元组

    列表和元组区别 元组和列表最大的区别就是,可以任意修改列表中的元素,可以任意插入或者删除一个元素,但对于元组是不行...

  • Python的列表和字典有什么区别,列表和元组有什么区别?

    字典和列表有什么区别? 那我们再来看,Python的列表和字典有什么区别,那其实一般的人会问你列表和元组有什么区别...

  • Python中的tuple元组

    Python中的tuple元组 一、访问元组 Python中的元组和列表类似,不同之处在于元组中的元素不能够被修改...

网友评论

      本文标题:python中的列表和元组都有哪些区别

      本文链接:https://www.haomeiwen.com/subject/mlahmhtx.html