Python中列表和元组的区别:列表和元组有什么区别 (python tubple)

关于Python中列表和元组的区别的问题,在python tubple中经常遇到, 元组 / 列表之间有什么区别,它们的优点 / 缺点是什么?

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

1092

元组有结构,列表有顺序。

使用这种区别使代码更加明确和易于理解。

一个例子是成对的页码和行号来引用书中的位置,例如:

my_location = (42, 11)  # page number, line number

然后,您可以将其用作字典中的键来存储位置注释。另一方面,列表可用于存储多个位置。自然,您可能希望从列表中添加或删除位置,因此列表是可变的。另一方面,从现有位置添加或删除项目没有意义-因此元组是不可变的。

在某些情况下,您可能希望更改现有位置元组中的项目,例如在迭代页面行时。但是元组不变性迫使您为每个新值创建一个新的位置元组。从表面上看,这似乎不方便,但是使用像这样的不可变数据是值类型和函数式编程技术的基石,这可能具有实质性的优势。

关于这个问题有一些有趣的文章,例如"Python Tuples are Not Just Constant Lists""Understanding tuples vs. lists in Python"。官方 Python 文档also mentions this

元组是不可变的,通常包含一个异质序列。

在像Haskell这样的静态类型语言中,元组中的值通常具有不同的类型,并且元组的长度必须是固定的。在列表中,所有值都具有相同的类型,并且长度不固定。因此差异非常明显。

最后是 Python 中的namedtuple,这是有道理的,因为元组已经应该具有结构。这强调了元组是类和实例的轻量级替代方案的想法。

400

列表和元组之间的区别

Literal
someTuple = (1,2)
someList  = [1,2] 
Size
a = tuple(range(1000))
b = list(range(1000))
a.__sizeof__() # 8024
b.__sizeof__() # 9088

由于元组操作的大小较小,因此它变得更快一些,但是直到您拥有大量元素之前,就不必多提了。

允许的操作

b    = [1,2]   
b[0] = 3       # [3, 2]
a    = (1,2)
a[0] = 3       # Error

这也意味着您不能删除元素或对元组进行排序。但是,您可以向 list 和 tuple 添加一个新元素,唯一的区别是,由于 tuple 是不可变的,因此您不是真正添加元素,而是创建一个新的 tuple,因此的 id 将更改

a     = (1,2)
b     = [1,2]  
id(a)          # 140230916716520
id(b)          # 748527696
a   += (3,)    # (1, 2, 3)
b   += [3]     # [1, 2, 3]
id(a)          # 140230916878160
id(b)          # 748527696
Usage

由于列表是可变的,它不能用作字典中的键,而可以使用元组。

a    = (1,2)
b    = [1,2] 
c = {a: 1}     # OK
c = {b: 1}     # Error
217

如果你去散步,你可以在任何时候在(x,y)元组中记录你的坐标。

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

但你不能反过来做。

88

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

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

对元组的好处:

性能略有提高。

由于元组是不可变的,因此可以将其用作字典中的键。

如果你不能改变它也不能任何人,也就是说你不需要担心任何 API 函数等改变你的元组没有被要求。

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(445)
Pg数据库导入数据:pg升级节省数据库定义耗时(pg definition)
上一篇
数据库建立索引语句:Numpy数组索引语法(array indexing python)
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(34条)