Python:元组和列表之间的异同

Python:元组和列表之间的异同,python,list,tuples,Python,List,Tuples,可能重复: 我有一个理论问题: 如果我说元组只是不可变的列表,那我怎么会错呢 我知道元组只有在某种程度上是不可变的:如果我有一个元组,其中有一个可变对象(列表、python对象等等),它在某种程度上是可变的,因为我可以更改该对象的值,但仍然是元组结构,它指向元素的指针保持不变,所以元组本身是不可变的。我知道,你不必解释这个 就我所知,除了可变性之外,没有什么区别。对于这两种类型,运算符+都返回由操作数元素组成的适当结构,因此,+=运算符工作得很好,都可以使用简单的索引或切片进行访问,都响应le

可能重复:

我有一个理论问题: 如果我说元组只是不可变的列表,那我怎么会错呢

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

就我所知,除了可变性之外,没有什么区别。对于这两种类型,运算符+都返回由操作数元素组成的适当结构,因此,+=运算符工作得很好,都可以使用简单的索引或切片进行访问,都响应len(),map()(这有点棘手:map(foo,tuple)返回列表,而不是元组。我想我知道这种行为的原因,但仍然值得一提)、all()、any()等等


所以-相同的功能,稍微不同的语法,在可变性上的主要区别。是这样吗?还是我错过了什么?

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

这里有一个很好的解释:


此外,这里还有一个类似的线索:

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

这里有一个很好的解释:


此外,这里还有一个类似的线索:

列表和元组之间的传统区别是元组用于固定长度的异构数据,而列表则用于可变长度的异构数据

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


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

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

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

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

我想说它使它们可以散列,因为如果它们的任何元素都不可散列,它们就不可散列。我想说它使它们可以散列,因为如果它们的任何元素都是不可破坏的,那么它们就是不可破坏的。