有什么不同?
元组/列表的优点/缺点是什么?
解决方法:
除了元组是不可变的之外,还有一个语义上的区别应该指导它们的使用.元组是异构数据结构(即,它们的条目具有不同的含义),而列表是同构序列.元组有结构,列表有顺序.
使用这种区别使代码更加明确和易懂.
一个例子是页面和行号对引用书中的位置,例如:
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,这是有道理的,因为元组已经被认为具有结构.这强调了元组是类和实例的轻量级替代品的想法.