python:元组和列表之间的区别和相似性

Python: Differences and similarities between tuples and lists

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
What's the difference between list and tuples in Python?

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

我知道元组只在某个层次上是不可变的:如果我有一个包含可变对象的元组(list,python对象,随便什么),它在某种程度上是可变的,因为我可以更改该对象的值,但仍然是元组结构,它指向元素的指针保持不变,所以元组本身是不可变的。我知道,你不必解释这个。

据我所知,除了可变性之外,没有什么不同。对于这两种类型,operator+返回由操作数元素组成的足够结构,按照顺序,+=operator工作良好,可以使用简单索引访问这两种类型,或者使用切片访问这两种类型,都响应len()、map()(这有点棘手:map(foo,tuple)返回list,而不是tuple。我想我知道这种行为的原因,但它仍然值得一提),all(),any(),等等…

所以-相同的功能,稍有不同的语法,主要区别在于易变性。对吗?还是我错过了什么?


列表和元组的传统区别在于,元组用于固定长度的异构数据,而列表则针对可变长度的同质数据。

近几年来,这种区别已经被放宽了。例如,tuples得到了仅对同构数据有意义的count()index()方法,isinstance(tuple, collections.Sequence)True

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


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

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

另外,这里还有一个类似的线程:python:list vs tuple,何时使用它们?