元组/列表之间的区别是什么?它们的优点/缺点是什么?


当前回答

如果你去散步,你可以随时在(x,y)元组中记下你的坐标。

如果你想记录你的旅程,你可以每隔几秒钟将你的位置添加到一个列表中。

但你不能反过来做。

其他回答

列表是可变的;元组不是。

从docs.python.org/2/tutorial/datastructures.html

元组是不可变的,通常包含的异构序列 通过解包访问的元素(参见本节后面的内容) 或者索引(在命名元组的情况下甚至通过属性)。列表 是可变的,它们的元素通常是同质的和 通过遍历列表来访问。

关键的区别是元组是不可变的。这意味着一旦创建了元组,就不能更改其中的值。

因此,如果您需要更改值,请使用List。

元组的好处:

性能略有改善。 元组是不可变的,可以用作字典中的键。 如果你不能改变它,其他人也不能,也就是说你不需要担心任何API函数等改变你的元组没有被要求。

首先,它们都是Python中的非标量对象(也称为复合对象)。

元组,有序的元素序列(可以包含任何没有混叠问题的对象) 不可变(tuple, int, float, str) 使用+进行连接(当然会创建一个全新的元组) 索引 切片 Singleton(3,) # ->(3)而不是(3)# -> 3 List(其他语言中的数组),值的有序序列 可变的 单例[3] 克隆new_array = origin_array[:] 列表推导式[x**2 for x in range(1,7)]给出 [1,4,9,16,25,36](不可读)

使用list还可能导致别名错误(两条不同的路径 指向同一对象)。

正如人们已经提到的区别,我将写一下为什么是元组。

为什么首选元组?

小元组的分配优化 为了减少内存碎片和加快分配速度,Python重用旧元组。如果一个 元组不再需要,并且只有少于20个项而不是删除 Python会永久地将它移到一个空闲列表中。 一个空闲列表被分为20个组,每个组代表一个 长度为n的元组列表,从0到20。每组都可以储存 到2000个元组。第一个(零)组只包含一个元素和 表示空元组。

>>> a = (1,2,3)
>>> id(a)
4427578104
>>> del a
>>> b = (1,2,4)
>>> id(b)
4427578104

在上面的例子中,我们可以看到a和b有相同的id。这是 因为我们立即占用了一个被破坏的元组 空闲列表。 列表的分配优化 由于列表可以被修改,Python不会像元组那样使用相同的优化方法。然而, Python列表也有一个free列表,但它只用于空列表 对象。如果一个空列表被GC删除或收集,它可以被删除 以后重用。

>>> a = []
>>> id(a)
4465566792
>>> del a
>>> b = []
>>> id(b)
4465566792

来源:https://rushter.com/blog/python-lists-and-tuples/

为什么元组比列表更高效?- > https://stackoverflow.com/a/22140115

List是可变的,tuples是不可变的。可变和不可变之间的主要区别是当您试图追加一个项时内存的使用。

当你创建一个变量时,一些固定的内存被分配给变量。如果它是一个列表,则分配的内存比实际使用的要多。例如,如果当前内存分配是100个字节,当你想追加第101个字节时,可能会再分配100个字节(在这种情况下总共是200个字节)。

然而,如果你知道你不经常添加新元素,那么你应该使用元组。Tuples精确地分配所需的内存大小,从而节省内存,特别是当您使用大块内存时。