Вопрос интервью Python: кортеж против списка
Позвольте мне начать серию постов «Вопросы для интервью с Python» с этого довольно распространенного вопроса. Кортежи и списки — это два, казалось бы, похожих типа последовательностей в Python. И я люблю этот вопрос, потому что глубина ответа — хороший показатель опыта кандидата.
Буквенный синтаксис. Самый очевидный способ получить требуемую структуру данных — вызвать соответствующий тип —tuple
или же list
. И вы также можете использовать синтаксический сахар для построения либо списка (используя квадратные скобки и запятые для объявления элементов), либо кортеж (используя запятые для объявления элементов и необязательно скобки для уменьшения двусмысленности).
Изменчивость. Кортежи неизменяемы, а списки изменяемы. Этот пункт является базой для следующих.
Использование памяти. Из-за изменчивости вам нужно больше памяти для списков и меньше памяти для кортежей.
Расширение. Вы можете добавить новый элемент как в кортежи, так и в списки, с той лишь разницей, что id кортежа будет изменен (т.е. у нас будет новый объект).
Хеширование. Кортежи можно хэшировать, а списки — нет. Это означает, что вы можете использовать кортеж в качестве ключа в словаре.
Семантика. Этот пункт больше касается передовой практики. Вы должны использовать кортежи как разнородные структуры данных, а списки — это однородные последовательности.
Ссылки: