Ответ 1
В CPython, вперед. Под обложками единственное реальное различие между хранением списков и кортежей заключается в том, что массив C-уровня, содержащий элементы кортежа, выделяется в кортеже, а объект списка содержит указатель на массив C-уровня, содержащий элементы списка, который выделяется отдельно от объекта списка. Реализация списка должна сделать это, потому что список может расти, и поэтому памяти, содержащей вектор уровня C, может потребоваться изменить свой базовый адрес. Кортеж не может изменить размер, поэтому память для него выделяется непосредственно в объекте кортежа.
Я создал кортежи с миллионами элементов, и все же я жил, чтобы напечатать об этом; -)
Obscure
В CPython может даже быть "причиной" предпочтения гигантских кортежей: циклическая схема сбора мусора освобождает кортеж от периодического сканирования, если он содержит только неизменяемые объекты. Тогда кортеж никогда не может быть частью цикла, поэтому циклический gc может игнорировать его. Та же оптимизация не может использоваться для списков; просто потому, что список содержит только неизменяемые объекты в течение одного цикла циклического gc, который ничего не говорит о том, будет ли это происходить во время следующего прогона.
Это почти никогда не имеет особого значения, но он может сохранить процент или около того в долгосрочной перспективе, и преимущество освобождения гигантских кортежей растет тем больше, что они есть.