为什么Django使用元组设置而不是列表?

Fla*_*ash 18 python django tuples list semantics

引用这个答案:

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

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

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
)
Run Code Online (Sandbox Code Playgroud)

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

小智 12

这在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


Gho*_*r21 10

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

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

对于序列设置,请使用元组而不是列表.这纯粹是为了表现.

稍后在讨论中,Django核心开发人员指出:

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

请注意原始文档中的"纯粹"一词 - 如果采用面值,则表示设置是不可变的并不是使用元组的原因.另请注意,票证讨论中的某些人将设置称为"排序"不可变,因此甚至不清楚设置实际上是不可变的.

PS如有兴趣,请注意机票解决方案以:

改变了"编写你自己的设置"建议,提到Django使用元组,但没有把它作为推荐.这可能会阻止无休止的元组与列表辩论.