Python中列表和元组有什么区别
前言
说到Python的数据类型,列表和元祖看起来有些相似,都是用来存储元素数组的,但它们却有各自的特点和区别。我们需要熟悉它们的使用特点,在工作中才不会错误使用。今天就来说说Python中列表和元组的区别。
列表list
列表在工作中十分常用,我们用它来创建数组,操作数组。它是动态数组,动态体现在它的元素可变、长度也可随时变化。
举个例子:
>>> alist = [1,2,3,4,5]
>>> # 更新0下标的元素
>>> alist[0] = 666
>>> alist
[666, 2, 3, 4, 5]
>>> len(alist)
5
>>> 新增数据
>>> alist.append(6)
>>> alist
[666, 2, 3, 4, 5, 6]
>>> len(alist)
6
列表之所以允许更新容量,是因为底层支持了resize的操作。在我们创建一个长度为M的列表a后,当我们需要新增元素时,比如要新增2个元素,Python会这么做:
- python会创建一个新的列表b,容量会大于M+2,为后续列表的append预留空间;
- 旧列表a的数据复制到新列表b中;
- 旧列表a被销毁。
这种预留空间的设计,对于后续新增的操作非常有用,因为如果不预留空间,每次新增数据都得向计算机申请内存及旧列表数据的内存复制,这些动作频繁操作代价很大。
元组tuple
相比于列表,元组不是动态数组,它在创建之后,元素及长度都不能被更改了。
举例如下,当我们想修改元素时,会直接报错。
>>> t = (1,2,3,4,5)
>>> t[0] = 666
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
但元组支持合并2个元组,这个类似列表的resize动作。和列表的append不同,元组的合并复杂度是O(n),因为元组合并其实就是创建一个新的元组,即重新分配内存空间,将2个元组的内容都复制到这个新元组。
>>> t = (1,2,3,4,5)
>>> t1 = (6,7,8)
>>> t2 = t + t1
>>> t2
(1, 2, 3, 4, 5, 6, 7, 8)
列表和元组的区别总结
总结如下:
- 列表是动态数组,元素可变,长度也可变。
- 元组是静态数组,创建之后不可变。
- 元组在Python运行时缓存。
前2点前面已介绍,关于第三点,元组在Python运行时缓存,好处是我们在使用元组时,不需要像列表一样,创建需要去访问内核获取内存分配。这个在使用时速度会很快,不需要频繁的和内核交互。
小结
这篇主要介绍了Python列表和元组的区别。我们在使用时,如果是预设好的数组,需要保证不被篡改,那么就使用元组。而列表动态可变,实际项目中运用得更广。
- 点赞
- 收藏
- 关注作者
评论(0)