Есть ли ситуация, когда использование списка приводит к ошибке, и вместо этого вы должны использовать кортеж?
Я кое-что знаю о свойствах как кортежей, так и списков, но недостаточно, чтобы выяснить, ответ на этот вопрос. Если бы вопрос был наоборот, то списки можно корректировать, а кортежи - нет.
Вы можете использовать кортежи в качестве ключей словаря, потому что они неизменяемы, но вы не можете использовать списки. Например:
d = {(1, 2): 'a', (3, 8, 1): 'b'} # Valid.
d = {[1, 2]: 'a', [3, 8, 1]: 'b'} # Error.
Из-за своей неизменной природы кортежи (в отличие от списков) хешируемые . Это то, что позволяет кортежам быть ключами в словарях, а также членами наборов. Строго говоря, имеет значение их хэшируемость, а не неизменность.
Таким образом, в дополнение к уже данному ключевому ответу словаря есть еще пара вещей, которые будут работать для кортежей, но не списков:
>>> hash((1, 2))
3713081631934410656
>>> set([(1, 2), (2, 3, 4), (1, 2)])
set([(1, 2), (2, 3, 4)])
В форматирование строки кортежи являются обязательными:
"You have %s new %s" % ('5', 'mails') # must be a tuple, not a list!
Использование списка в этом примере приводит к ошибке «недостаточно аргументов для строки формата. ", потому что список рассматривается как один аргумент. Странно, но факт.