При изучении Python я столкнулся с вопросом. Есть две похожие структуры данных — list и tuple. На первый взгляд они схожи, ведь обе представляют собой последовательности элементов. Но между ними, как оказалось, есть важные отличия, и от правильного выбора зависит как удобство написания кода, так и его производительность.
В этой статье мы подробно сравним python list и python tuple, разберём их особенности, преимущества и недостатки, а в конце дадим рекомендации, какой тип использовать в тех или иных ситуациях.
А в конце удобная сравнительная табличка.
Что такое list в Python
List (список) — это изменяемая коллекция элементов. Это значит, что после создания списка вы можете изменять его содержимое: добавлять, удалять, сортировать элементы и т.д.
Пример:
fruits = ['apple', 'banana', 'cherry']
fruits.append('orange')
print(fruits) # выведет ['apple', 'banana', 'cherry', 'orange']
Списки очень гибкие и являются одной из самых часто используемых структур в Python. Благодаря множеству встроенных методов, python list отлично подходит для работы с динамическими данными.
Это наверное самая функциональная коллекция. Такого количества методов как у list нет ни у какой другой.
Про методы списков поговорим в следующих статьях. Подпишитесь, чтобы не пропустить.
Что такое tuple в Python
Tuple (кортеж) — это неизменяемая коллекция. После создания кортежа вы не можете изменить его содержимое: ни добавить, ни удалить, ни заменить элементы.
Пример, попытаемся изменить первый элемент:
coordinates = (10, 20)
# coordinates[0] = 5 # Ошибка: кортеж нельзя изменить
Кортежи часто используют для хранения фиксированных наборов значений, особенно когда нужно быть уверенным, что данные не будут случайно изменены. Python tuple также может использоваться как ключ в словаре — в отличие от списка.
Кстати, строки в таблицах реляционных баз данных еще называют кортежами. И данные из таблиц БД приезжают в исполняемую программу именно в виде кортежей. Подумайте кстати почему.
Изменяемость
List: изменяемый
Вы можете изменять содержимое списка:
numbers = [1, 2, 3]
numbers[0] = 100
Tuple: неизменяемый
Попытка изменить элемент кортежа вызовет ошибку:
t = (1, 2, 3)
# t[0] = 100 # TypeError
Неизменяемость делает python tuple безопасным для использования в многопоточном коде и защищённым от случайных изменений.
Производительность
Кортежи занимают меньше памяти и быстрее обрабатываются. А еще занимают меньше памяти. Определим размер коллекций с одинаковыми данными:
import sys
print(sys.getsizeof([1, 2, 3])) # list
print(sys.getsizeof((1, 2, 3))) # tuple
Результат покажет, что tuple легче. Если вы работаете с большим количеством данных и не планируете изменять их, tuple — более эффективный выбор.
Вложенность и структуры
Tuple можно использовать как ключ в словаре:
locations = { (40.7128, -74.0060): "New York" }
List нельзя использовать в качестве ключа, так как он изменяем:
{[1, 2]: "value"} # TypeError
Это делает python tuple незаменимым в некоторых структурах данных и алгоритмах.
Использование в функциях
При передаче списка в функцию, он может быть изменён внутри:
def modify_list(lst):
lst.append(999)
data = [1, 2, 3]
modify_list(data)
print(data) # [1, 2, 3, 999]
С кортежем такого не произойдёт:
def modify_tuple(tpl):
tpl[0] = 999 # Ошибка
Кстати, если функция возвращает несколько значений, они передаются как кортеж:
def return_values():
x = 1
y = 2
return x, y
print(return_values()) # напечатает (1, 2)
Ну и правильно. Не списком же отдавать однозначный и неизменный результат работы функции.
Синтаксические различия
- Список: []
- Кортеж: ()
Одноэлементные коллекции:
l = [5] # список
t = (5,) # кортеж, когда один элемент, запятая обязательна, в отличие от списка
Пустые коллекции можно задать так, и python поймет что одна список, а вторая кортеж:
empty_list = []
empty_tuple = ()
Преобразование list ⇄ tuple
Иногда нужно конвертировать один тип в другой:
l = [1, 2, 3]
t = tuple(l)
back_to_list = list(t)
Это удобно, когда вы хотите сначала сформировать данные, а затем «заморозить» их.
Порядок элементов сохраняется так как и тот и другой - упорядоченные коллекции (в отличие от множеств set, например)
Когда использовать list, а когда tuple
Используйте list, если:
- Вам нужно изменять коллекцию (добавлять, удалять, менять элементы)
- Вы работаете с динамическими данными
- Нужны методы вроде append(), sort(), pop()
Используйте tuple, если:
- Данные должны быть неизменяемыми
- Важна производительность и экономия памяти
- Вы используете значения как ключи в словаре
- Нужно документировать структуру (например, координаты, RGB-цвета)
Python list и Python tuple — что выбрать?
Если вы не планируете менять коллекцию — выбирайте tuple. Если нужна гибкость — list. Правильный выбор между python list и python tuple сделает ваш код более читаемым, надёжным и эффективным.
Если статья была полезна — поставьте пожалуйста ей лайк! Тогда статью увидит больше читателей, а мне будет приятнее готовить для вас ещё больше полезных материалов.
Не нашли чего-то в статье? Пишите в комменты чего не хватает, и я добавлю!