Рубрики
Без рубрики

Списки против кортежей в Python

Автор оригинала: 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, между ними существуют значительные различия, основное различие заключается в том, что списки изменчивы, а кортежи неизменны. Список имеет переменный размер, а кортеж-фиксированный. Операции с кортежами могут выполняться быстрее, чем операции со списками.