2024-04-26 17:35:44 发布
网友
如果你去散步,你可以在一个(x,y)元组中随时记录你的坐标。
(x,y)
如果你想记录你的旅程,你可以每隔几秒钟把你的位置添加到一个列表中。
但你不能反过来做。
列表和元组的区别
文字
someTuple = (1,2) someList = [1,2]
大小
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的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
用法
由于列表是可变的,所以它不能用作字典中的键,而可以使用元组。
a = (1,2) b = [1,2] c = {a: 1} # OK c = {b: 1} # Error
除了元组是不可变的之外,还有一个语义上的区别应该指导它们的使用。元组是异构的数据结构(即,它们的条目有不同的含义),而列表是同构的序列。元组有结构,列表有顺序。
使用这种区别可以使代码更加明确和易于理解。
一个例子是一本书中参考位置的页码和行号对,例如:
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
"Tuples are immutable, and usually contain an heterogeneous sequence ...".
在静态类型语言中,如Haskell元组中的值通常有不同的类型,并且元组的长度必须是固定的。在列表中,所有值都具有相同的类型,并且长度不是固定的。所以差别非常明显。
最后是Python中的namedtuple,这是有意义的,因为元组已经被假定具有结构。这突出了元组是类和实例的轻量级替代品的想法。
如果你去散步,你可以在一个
(x,y)
元组中随时记录你的坐标。如果你想记录你的旅程,你可以每隔几秒钟把你的位置添加到一个列表中。
但你不能反过来做。
列表和元组的区别
文字
大小
由于元组操作的大小较小,它会变得更快一些,但在拥有大量元素之前,就没有那么多要提及的内容了。
允许的操作
这也意味着不能删除元素或对元组排序。 但是,您可以将新元素添加到list和tuple中,唯一的区别是您将通过添加元素来更改tuple的id
用法
由于列表是可变的,所以它不能用作字典中的键,而可以使用元组。
除了元组是不可变的之外,还有一个语义上的区别应该指导它们的使用。元组是异构的数据结构(即,它们的条目有不同的含义),而列表是同构的序列。元组有结构,列表有顺序。
使用这种区别可以使代码更加明确和易于理解。
一个例子是一本书中参考位置的页码和行号对,例如:
然后,您可以将此作为字典中的键来存储位置上的注释。另一方面,列表可以用于存储多个位置。很自然地,人们可能希望从列表中添加或删除位置,因此列表是可变的是有意义的。另一方面,从现有位置添加或删除项是没有意义的,因此元组是不可变的。
在某些情况下,您可能希望更改现有位置元组中的项,例如在遍历页的行时。但是元组不变性迫使您为每个新值创建一个新的位置元组。从表面上看,这似乎不太方便,但是像这样使用不可变数据是值类型和函数式编程技术的基础,这些技术可能具有实质性的优势。
关于这个问题有一些有趣的文章,例如"Python Tuples are Not Just Constant Lists"或"Understanding tuples vs. lists in Python"。Python官方文档also mentions this
在静态类型语言中,如Haskell元组中的值通常有不同的类型,并且元组的长度必须是固定的。在列表中,所有值都具有相同的类型,并且长度不是固定的。所以差别非常明显。
最后是Python中的namedtuple,这是有意义的,因为元组已经被假定具有结构。这突出了元组是类和实例的轻量级替代品的想法。
相关问题 更多 >
编程相关推荐