Python:元组和列表之间的差异和相似之处[重复]

Posted

技术标签:

【中文标题】Python:元组和列表之间的差异和相似之处[重复]【英文标题】:Python: Differences and similarities between tuples and lists [duplicate] 【发布时间】:2012-03-10 05:54:28 【问题描述】:

可能重复:What's the difference between list and tuples in Python?

我有一个理论问题: 如果我说元组只是不可变的列表,我怎么错了(或者我不是?)?

我知道元组仅在某种程度上是不可变的:如果我有一个包含可变对象的元组(列表、python 对象等)-它在某种程度上是可变的,因为我可以更改该对象的值,但仍然- 元组结构,它指向元素的指针保持不变,所以元组本身是不可变的。我知道,你不必解释。

据我所知,除了可变性之外 - 没有任何区别。对于这两种类型,运算符 + 返回由操作数元素组成的足够结构,按顺序,+= 运算符也可以正常工作,两者都可以通过简单索引或切片访问,都响应 len()、map()(这是小技巧:map(foo, tuple) 返回列表,而不是元组。我想我明白了这种行为的原因,但仍然值得一提)、all()、any() 等...

所以 - 相同的功能,略有不同的语法,可变性的主要区别。那正确吗?还是我错过了什么?

【问题讨论】:

【参考方案1】:

列表和元组之间的传统区别在于,元组旨在用于固定长度的异构数据,而列表旨在用于可变长度的同类数据。

这种区分近年来有所放松。例如,元组有 count()index() 方法,它们只对同质数据有意义,isinstance(tuple, collections.Sequence)True

所以在我看来,将元组视为不可变列表并不算太离谱。不变性允许它们是可散列的,因此它们可以用作字典和集合中的键,因为所有项目都是可散列的,但它们不能更改。

【讨论】:

我会说它使它们是可散列的,因为如果它们的任何元素不可散列,它们就不可散列。【参考方案2】:

基本上你是对的,但概念有点不同。

这里有一个很好的解释:http://news.e-scribe.com/397

另外,这里有一个类似的帖子:python: list vs tuple, when to use each?

【讨论】:

以上是关于Python:元组和列表之间的差异和相似之处[重复]的主要内容,如果未能解决你的问题,请参考以下文章

python元组或者列表太长?

Python面试必考重点之列表,元组和字典第一关——如何定义集合/集合与列表有什么区别/如何去掉列表(元组)中重复的元素

python中的元组和列表有啥区别,哪个更有效[重复]

元组和列表的区别

元组和列表的区别

元组和列表的区别