19

引用这个答案

除了元组是不可变的之外,还有一个语义区别应该指导它们的使用。元组是异构数据结构(即它们的条目具有不同的含义),而列表是同构序列。元组有结构,列表有顺序。

这对我来说很有意义。但是为什么 Django 使用元组而不是列表进行设置呢?例子:

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
)

这(以及所有其他设置)在语义上不是列表的完美案例吗?

4

3 回答 3

13

这在 Django 1.9 中有所改变:

元组的默认设置现在是列表

django.conf.global_settings中的默认设置是列表和元组的组合。以前是元组的所有设置现在都是列表。

https://docs.djangoproject.com/en/1.9/releases/1.9/#default-settings-that-were-tuples-are-now-lists

于 2016-03-08T19:08:00.717 回答
10

根据 user1474837 在这个问题上对Django 票证的有用链接,很明显,元组用于向后兼容从一开始就完成设置的方式,因为相信元组比列表更快,所以使用元组。(根据票务讨论中引用的数据,它们是,但只是非常轻微。)

具体来说,Django 文档曾经说过:

对于序列的设置,使用元组而不是列表。这纯粹是为了性能。

在讨论的后面,一位 Django 核心开发人员指出:

我们当然不会从元组转移到那里的列表,因为它会破坏已经期望事物是元组的现有代码。但是,我将删除性能说明,因为它不值得吓唬人。

请注意原始文档中的“纯粹”一词——如果从表面上看,这意味着表明设置是不可变的,这不是使用元组的原因。另请注意,票务讨论中的某些人将设置称为“某种”不可变的,因此甚至不清楚设置实际上是不可变的。

PS出于兴趣,请注意票务解决方案以:

更改了“编写您自己的设置”建议以提及 Django 使用元组,但未将其作为建议。这可能会阻止无休止的元组与列表辩论。

于 2012-09-11T05:00:43.860 回答
2

我认为部分原因是元组是只读的,它更安全,更适合设置。

于 2012-09-11T04:03:33.783 回答