写点什么

Python 列表和元组有什么区别

  • 2022-10-24
    广东
  • 本文字数:963 字

    阅读完需:约 3 分钟

前言

说到 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 会这么做:

  1. python 会创建一个新的列表 b,容量会大于 M+2,为后续列表的 append 预留空间;

  2. 旧列表 a 的数据复制到新列表 b 中;

  3. 旧列表 a 被销毁。

这种预留空间的设计,对于后续新增的操作非常有用,因为如果不预留空间,每次新增数据都得向计算机申请内存及旧列表数据的内存复制,这些动作频繁操作代价很大。

元组 tuple

相比于列表,元组不是动态数组,它在创建之后,元素及长度都不能被更改了。

举例如下,当我们想修改元素时,会直接报错。


>>> t = (1,2,3,4,5)>>> t[0] = 666Traceback (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)
复制代码

列表和元组的区别总结

总结如下:

  1. 列表是动态数组,元素可变,长度也可变。

  2. 元组是静态数组,创建之后不可变。

  3. 元组在 Python 运行时缓存。

前 2 点前面已介绍,关于第三点,元组在 Python 运行时缓存,好处是我们在使用元组时,不需要像列表一样,创建需要去访问内核获取内存分配。这个在使用时速度会很快,不需要频繁的和内核交互。

小结

这篇主要介绍了 Python 列表和元组的区别。我们在使用时,如果是预设好的数组,需要保证不被篡改,那么就使用元组。而列表动态可变,实际项目中运用得更光。

发布于: 刚刚阅读数: 3
用户头像

还未添加个人签名 2020-06-16 加入

还未添加个人简介

评论

发布
暂无评论
Python列表和元组有什么区别_后端_芥末拌个饭吧_InfoQ写作社区