Python中列表和元组有什么区别

举报
芥末拌个饭吧 发表于 2022/11/14 13:53:32 2022/11/14
【摘要】 说到Python的数据类型,列表和元祖看起来有些相似,都是用来存储元素数组的,但它们却有各自的特点和区别。我们需要熟悉它们的使用特点,在工作中才不会错误使用。今天就来说说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会这么做:

  1. python会创建一个新的列表b,容量会大于M+2,为后续列表的append预留空间;
  2. 旧列表a的数据复制到新列表b中;
  3. 旧列表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)

列表和元组的区别总结

总结如下:

  1. 列表是动态数组,元素可变,长度也可变。
  2. 元组是静态数组,创建之后不可变。
  3. 元组在Python运行时缓存。

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

小结

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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。