Почему Django использует кортежи для настроек, а не для списков?

Цитируя этот ответ :

Помимо неизменности кортежей, существует также семантическое различие, которое должно служить руководством для их использования. Кортежи представляют собой разнородные структуры данных (т. Е. Их записи имеют разные значения), а списки – однородные последовательности. Кортежи имеют структуру, списки имеют порядок.

  • Преобразование кортежа в словарь
  • Назначение кортежа Python и проверка в условных операторах
  • Преобразовать кортеж в dict
  • Как я могу отсортировать список кортежей одним из его значений, а затем другим?
  • Python: В чем разница между этими двумя операторами импорта?
  • Как кортеж реализован в CPython?
  • Это имеет смысл для меня. Но почему Django использует кортежи, а не списки для настроек? Пример:

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

    Разве это (и все остальные настройки) не подходит для семестра для списка?

  • Python: список dict, если существует, увеличивает значение dict, если не добавляет новый dict
  • Как добавить значения в существующий словарь-ключ Python
  • Кортеж для списка - возвращаемый тип Python / PostgreSQL записи SETOF
  • Значение кортежа по ключу
  • Как передать элементы кортежей функции в качестве аргументов в python?
  • Преобразование строки Python в кортеж без разделения символов
  • 3 Solutions collect form web for “Почему Django использует кортежи для настроек, а не для списков?”

    Основываясь на полезной ссылке user1474837 на билет Django по этому вопросу, кажется очевидным, что кортежи используются для обратной совместимости с тем, как были выполнены настройки с самого начала, которые были с кортежами из-за того, что они были быстрее, чем списки. (Они есть, но только очень немного, согласно данным, приведенным в обсуждении билета).

    В частности, Django docs говорил:

    Для настроек, которые являются последовательностями, используйте кортежи вместо списков. Это чисто для производительности.

    Позже в обсуждении основной разработчик Django отмечает:

    Мы, конечно, не собираемся переходить от кортежей к спискам, потому что это сломает существующий код, который уже ожидает, что все будет кортежи. Однако я удалю заметку о производительности, поскольку это не стоит пугать людей.

    Обратите внимание на слово «чисто» в исходной документации, которое, если оно принимается по номинальной стоимости, означает, что параметры индикации неизменяемы, не является причиной того, что используются кортежи. Также обратите внимание, что кто-то в настройках ссылок на обсуждение билетов «как-то» неизменен, поэтому даже четкие настройки на самом деле неизменяемы.

    PS За интерес, обратите внимание, что разрешение на билет заканчивается:

    Изменена рекомендация «написать свои собственные настройки», чтобы упомянуть, что Django использует кортежи, но не делает его рекомендацией. Это может предотвратить бесконечные кортежи против дебатов.

    Это было изменено в 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

    Я думаю, что причиной разума является кортеж, предназначенный только для чтения, который будет более безопасным и более подходящим для настройки.

    Python - лучший язык программирования в мире.