首先,这条准则是唯一正确的。您可以自由使用元组来处理同质数据,也可以使用列表来处理异质数据,在某些情况下,这是一件很好的事情。一个重要的情况是,如果需要哈希表的集合,以便可以将其用作字典键;在这种情况下,必须使用元组,即使所有元素本质上都是同质的。
还要注意,同质/异质的区别实际上是关于数据的语义,而不仅仅是类型。一个名称、职业和地址的序列可能被认为是异构的,即使这三个序列都可以表示为字符串。因此,更重要的是要考虑如何处理数据(即,您是否会对元素进行相同的处理),而不是考虑它们是什么类型的。
也就是说,我认为对于同质数据,列表是首选的一个原因是它们是可变的。如果你有一个同一类的清单,那么在清单上再加一个,或者拿走一个,也许是有意义的;当你这样做的时候,你仍然会留下一个同一类的清单。
相比之下,如果你有一个异类的集合,那通常是因为你有一个固定的结构或“模式”(例如,第一个是ID号,第二个是名字,第三个是地址,或者其他什么)。在这种情况下,从集合中添加或删除元素是没有意义的,因为集合是一个集成的整体,每个元素都具有指定的角色。如果不更改元素所表示的整个架构,则无法添加元素。
简而言之,同质集合的大小变化比异质集合更自然,因此可变类型对于同质集合更自然。