Python 列表和元组有什么区别
前言
说到 Python 的数据类型,列表和元祖看起来有些相似,都是用来存储元素数组的,但它们却有各自的特点和区别。我们需要熟悉它们的使用特点,在工作中才不会错误使用。今天就来说说 Python 中列表和元组的区别。
列表 list
列表在工作中十分常用,我们用它来创建数组,操作数组。它是动态数组,动态体现在它的元素可变、长度也可随时变化。
举个例子:
列表之所以允许更新容量,是因为底层支持了 resize 的操作。在我们创建一个长度为 M 的列表 a 后,当我们需要新增元素时,比如要新增 2 个元素,Python 会这么做:
python 会创建一个新的列表 b,容量会大于 M+2,为后续列表的 append 预留空间;
旧列表 a 的数据复制到新列表 b 中;
旧列表 a 被销毁。
这种预留空间的设计,对于后续新增的操作非常有用,因为如果不预留空间,每次新增数据都得向计算机申请内存及旧列表数据的内存复制,这些动作频繁操作代价很大。
元组 tuple
相比于列表,元组不是动态数组,它在创建之后,元素及长度都不能被更改了。
举例如下,当我们想修改元素时,会直接报错。
但元组支持合并 2 个元组,这个类似列表的 resize 动作。和列表的 append 不同,元组的合并复杂度是 O(n),因为元组合并其实就是创建一个新的元组,即重新分配内存空间,将 2 个元组的内容都复制到这个新元组。
列表和元组的区别总结
总结如下:
列表是动态数组,元素可变,长度也可变。
元组是静态数组,创建之后不可变。
元组在 Python 运行时缓存。
前 2 点前面已介绍,关于第三点,元组在 Python 运行时缓存,好处是我们在使用元组时,不需要像列表一样,创建需要去访问内核获取内存分配。这个在使用时速度会很快,不需要频繁的和内核交互。
小结
这篇主要介绍了 Python 列表和元组的区别。我们在使用时,如果是预设好的数组,需要保证不被篡改,那么就使用元组。而列表动态可变,实际项目中运用得更光。
版权声明: 本文为 InfoQ 作者【芥末拌个饭吧】的原创文章。
原文链接:【http://xie.infoq.cn/article/06df5e118140d9ae944d098bd】。文章转载请联系作者。
评论