引用this answer:
除了元组是不可变的之外,还有一个语义上的区别应该指导它们的使用。元组是异构数据结构(即,它们的条目具有不同的含义),而列表是同构序列。元组有结构,列表有顺序。
这对我有意义。但是为什么Django使用元组而不是列表进行设置?例如:
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
)
这个(以及所有其他设置)在语义上是不是一个完美的案例?
答案 0 :(得分:10)
基于user1474837对这个问题的Django ticket的有用链接,似乎很明显,元组用于向后兼容设置从一开始就完成的方式,这与元组有关,因为他们相信它们更快比列表。 (根据票证讨论中引用的数据,它们是,但只是非常轻微。)
具体来说,Django文档曾经说过:
对于序列设置,请使用元组而不是列表。这纯粹是为了表现。
稍后在讨论中,Django核心开发人员指出:
我们肯定不会从元组转移到那里的列表,因为它会破坏已经预期会成为元组的现有代码。不过,我会删除效果说明,因为它不值得吓唬人。
请注意原始文档中的“纯粹”一词 - 如果采用面值,则表示设置是不可变的不是使用元组的原因。另请注意,故障单讨论中的某些人将设置称为“排序”不可变,因此甚至不清楚设置实际上是不可变的。
P.S。如有兴趣,请注意票证解决方案以:
结束更改了“编写自己的设置”建议,提到Django 使用元组,但不是建议。这可能会让人无穷无尽 元组与列表辩论。
答案 1 :(得分:2)
我认为原因部分是元组是只读的,它更安全,更适合设置。