Автор оригинала: Nicholas Samuel.
Вступление
Списки и кортежи-это две наиболее часто используемые структуры данных в Python, а словарь-третья. Списки и кортежи имеют много общего. Некоторые из них были зачислены ниже:
- Они оба являются типами данных последовательности, которые хранят коллекцию элементов
- Они могут хранить элементы любого типа данных
- И любой элемент доступен через его индекс.
Итак, вопрос, на который мы пытаемся ответить здесь, заключается в том, чем они отличаются? И если между ними нет разницы, то почему мы должны иметь их? Разве у нас не может быть ни списков , ни кортежей?
В этой статье мы покажем, как списки и кортежи отличаются друг от друга.
Разница в синтаксисе
В Python списки и кортежи объявляются по-разному. Список создается с помощью квадратных скобок []
, а кортеж-с помощью круглых скобок ()
. Посмотрите на следующий пример:
tuple_names = ('Nicholas', 'Michelle', 'Alex') list_names = ['Nicholas', 'Michelle', 'Alex'] print(tuple_names) print(list_names)
Выход:
('Nicholas', 'Michelle', 'Alex') ['Nicholas', 'Michelle', 'Alex']
Мы определили кортеж с именем tuple_names
и список с именем list_names
. В определении кортежа мы использовали скобки ()
, а в определении списка-квадратные скобки []
.
Python имеет объект type ()
, который помогает нам узнать тип созданного объекта. Мы можем использовать его следующим образом:
print(type(tuple_names)) print(type(list_names))
Выход:
Изменчивое против Неизменный
Списки изменчивы, в то время как кортежи неизменны, и это отмечает КЛЮЧЕВОЕ различие между ними. Но что мы имеем в виду?
Ответ таков: мы можем изменить/изменить значения списка, но мы не можем изменить/изменить значения кортежа.
Поскольку списки изменчивы, мы не можем использовать список в качестве ключа в словаре. Это происходит потому, что только неизменяемый объект может быть использован в качестве ключа в словаре. Таким образом, мы можем использовать кортежи в качестве ключей словаря, если это необходимо.
Давайте рассмотрим пример, демонстрирующий разницу между списками и кортежами с точки зрения неизменности.
Давайте создадим список различных имен:
names = ["Nicholas", "Michelle", "Alex"]
Давайте посмотрим, что произойдет, если мы попытаемся изменить первый элемент списка с “Николая” на “Самуила”:
names[0] = "Samuel"
Обратите внимание, что первый элемент имеет индекс 0.
Теперь давайте покажем содержимое списка:
>>> names
Выход:
['Samuel', 'Michelle', 'Alex']
Вывод показывает, что первый элемент списка был успешно изменен!
Что, если мы попытаемся сделать то же самое с кортежем? Давайте посмотрим:
Во – первых, создайте кортеж:
names = ("Nicholas", "Michelle", "Alex")
Попробуем теперь изменить первый элемент кортежа с “Николая” на “Самуила”.”:
names[0] = "Samuel"
Выход:
Traceback (most recent call last): File "", line 1, in names[0] = "Samuel" TypeError: 'tuple' object does not support item assignment
Мы получили ошибку, что объект кортежа не поддерживает назначение элемента. Причина в том, что объект кортежа не может быть изменен после его создания.
Повторное использование против Скопированный
Кортежи не могут быть скопированы. Причина в том, что кортежи неизменны. Если вы запустите tuple(tuple_name)
, он немедленно вернется сам. Например:
names = ('Nicholas', 'Michelle', 'Alex') copyNames = tuple(names) print(names is copyNames)
Выход:
True
Это одно и то же.
Напротив, list(list_name)
требует копирования всех данных в новый список. Например:
names = ['Nicholas', 'Michelle', 'Alex'] copyNames = list(names) print(names is copyNames)
Выход:
False
Далее давайте обсудим, как список и кортеж отличаются по размеру.
Разница в размерах
Python выделяет память кортежам в терминах больших блоков с низкими накладными расходами, потому что они неизменяемы. С другой стороны, для списков Pythons выделяет небольшие блоки памяти. В конце концов, кортеж будет иметь меньшую память по сравнению со списком. Это делает кортежи немного быстрее, чем списки, когда у вас есть большое количество элементов.
Например:
tuple_names = ('Nicholas', 'Michelle', 'Alex') list_names = ['Nicholas', 'Michelle', 'Alex'] print(tuple_names.__sizeof__()) print(list_names.__sizeof__())
Выход:
48 64
Приведенный выше вывод показывает, что список имеет больший размер, чем кортеж. Показанный размер выражен в байтах.
Однородный против Гетерогенный
Кортежи используются для хранения разнородных элементов, которые являются элементами, принадлежащими к различным типам данных. Списки, с другой стороны, используются для хранения однородных элементов, которые являются элементами, принадлежащими к одному типу.
Однако обратите внимание, что это всего лишь семантическое различие. Вы можете хранить элементы одного типа в кортеже и элементы разных типов в списке. Например:
list_elements = ['Nicholas', 10, 'Alex'] tuple_elements = ('Nicholas', "Michelle", 'Alex')
Приведенный выше код будет работать без ошибок, несмотря на то, что список содержит смесь строк и чисел.
Переменная длина против Фиксированная Длина
Кортежи имеют фиксированную длину, а списки-переменную. Это означает, что мы можем изменить размер созданного списка, но мы не можем изменить размер существующего кортежа. Например:
list_names = ['Nicholas', 'Michelle', 'Alex'] list_names.append("Mercy") print(list_names)
Выход:
['Nicholas', 'Michelle', 'Alex', 'Mercy']
Вывод показывает, что в список добавлено четвертое имя. Для этого мы использовали функцию Python append ()
. Мы могли бы добиться того же с помощью функции insert ()
, как показано ниже:
list_names = ['Nicholas', 'Michelle', 'Alex'] list_names.insert(3, "Mercy") print(list_names)
Выход:
['Nicholas', 'Michelle', 'Alex', 'Mercy']
Вывод снова показывает, что в список добавлен четвертый элемент.
Кортеж Python не предоставляет нам способа изменить его размер.
Вывод
Мы можем сделать вывод, что, хотя и списки, и кортежи являются структурами данных в Python, между ними существуют значительные различия, основное различие заключается в том, что списки изменчивы, а кортежи неизменны. Список имеет переменный размер, а кортеж-фиксированный. Операции с кортежами могут выполняться быстрее, чем операции со списками.