有什么不同?
元组/列表的优点/缺点是什么?
除了元组是不可变的之外,还应有语义上的区别来指导它们的用法。元组是异构数据结构(即,它们的条目具有不同的含义),而列表是同类序列。元组具有结构,列表具有顺序。
使用这种区别可以使代码更加明确和易于理解。
一个示例是成对的页和行号,以成对参考书中的位置,例如:
my_location = (42, 11) # page number, line number
然后,您可以将其用作字典中的键来存储有关位置的注释。另一方面,列表可用于存储多个位置。自然地,人们可能想在列表中添加或删除位置,因此使列表可变是有意义的。另一方面,从现有位置添加或删除项目没有意义-因此,元组是不可变的。
在某些情况下,您可能想更改现有位置元组中的项目,例如在页面的各行中进行迭代时。但是元组不变性迫使您为每个新值创建一个新的位置元组。从表面上看,这似乎很不方便,但是使用这样的不可变数据是值类型和函数式编程技术的基石,它可以具有很多优点。
关于此问题,有一些有趣的文章,例如“ Python元组不仅仅是常量列表”或“了解Python中的元组与列表”。官方Python文档也提到了这一点
“组是不可变的,并且通常包含一个异类序列…”。
在像Haskell这样的静态类型语言中,元组中的值通常具有不同的类型,并且元组的长度必须固定。在列表中,所有值都具有相同的类型,并且长度不是固定的。因此区别非常明显。
最后,Python中有一个namedtuple,这很有意义,因为一个元组应该已经具有结构。这强调了元组是类和实例的轻量级替代方案的思想。