Python中列表和元组(减去不变性)之间的区别?

时间:2012-04-02 00:38:09

标签: list python-3.x tuples

我已经知道Python中列表和元组之间的主要区别在于列表是可变的而元组则不是。除此之外,他们可以使用不同的方法,我对列表和元组知之甚少。它们之间还有其他区别吗?在Python 3中使用元组而不是任何优点/缺点(除了不变性)?是否有一个比另一个更快的访问时间,或具有更小的内存大小,或包含更多的方法?他们的内部结构有何不同?或者是一个元组只是一个不可变的列表,仅此而已?

3 个答案:

答案 0 :(得分:7)

列表和元组都在内部实现为元素对象的引用数组。这样,两者都可以被索引,并且两个元素都需要相同的内存量。在内部,它们都是同类的(无类型引用)。从逻辑上讲,它们都是异构的(自动解除引用,类型绑定到目标对象)。

可以修改列表,因此内部数组是动态数组。元组无法修改,因此它在内部只是固定大小的数组。从这个角度来看,元组更简单。

对于哪个更快或更快,您可以使用timeit模块测量具体情况。

您应该意识到元组仅在存储引用的数量和值方面是不可变的。如果(比方说)列表用作元组元素之一,则可以更改列表内容。这样,逻辑上,元组内容不是常量(这样的元组不可清除)。

使用任何类型更好的目的。没有严格的偏好。这取决于具体情况。

答案 1 :(得分:4)

在他们两个上运行dir - 非常不同的方法列表(下面演示了pop)。元组可能更快

>>> alist = [1,2,3]
>>> atuple = (1,2,3)
>>> alist.pop()
3
>>> atuple.pop()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'tuple' object has no attribute 'pop'

'append','count','extend','index','insert','pop','remove','reverse','sort'都可用于列表,而不适用于元组 - 哪个考虑到不变性的想法,这是有道理的。

哲学上,有些人希望列表是同质的,并且没有对元组的期望。

答案 2 :(得分:2)

在 Python 中,有两种类型的数据结构:列表和元组。列表具有动态属性,而元组具有静态属性。 在其他语言中,列表的声明方式与数组类似。列表不必一直都是同质的,这使其成为 Python 最有效的工具。列表是 Python 数据结构中的一种容器,用于一次存储多条数据。列表是跟踪数据序列并对其进行迭代的好方法。

Tuple 是一种序列数据形式,可以包含各种数据类型的元素,但它是不可变的。换句话说,元组是以逗号分隔的 Python 属性列表。由于其静态存在,元组比数组更快。

以下是我设法获得的一些差异;

  1. 列表是可变的
  2. 元组是不可变的

列表 - 迭代的含义是耗时的。 元组 - 迭代的含义相对更快。

列表 - 列表更适合执行操作,例如插入和删除。 Tuple -Tuple 数据类型适用于访问元素。

列表 - 列表消耗更多内存。 Tuple -Tuple 与列表相比消耗更少的内存。

Lists -Lists 有几个内置方法。 Tuple -Tuple 没有很多内置方法。

列表 - 更可能发生意外的更改和错误。 元组 - 在元组中,很难发生。

希望你理解。