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

Введение Списки и кортежи - две наиболее часто используемые структуры данных в Python, а третьей - словарь. Списки и кортежи имеют много общего. Некоторые из них перечислены ниже: * Они оба являются типами данных последовательности, которые хранят коллекцию элементов * Они могут хранить элементы любого типа данных * И любой элемент доступен через его индекс. Итак, вопрос, на который мы пытаемся ответить, - чем они отличаются? И если между ними нет разницы, зачем нам

Вступление

Списки и кортежи - две наиболее часто используемые структуры данных в 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)) 

Выход:

 <class 'tuple'> 
 <class 'list'> 

Изменяемый против неизменного

Списки изменяемы, в то время как кортежи неизменны, и это отмечает КЛЮЧЕВОЕ различие между ними. Но что мы подразумеваем под этим?

Ответ таков: мы можем изменять / модифицировать значения списка, но мы не можем изменять / модифицировать значения кортежа.

Поскольку списки изменяемы, мы не можем использовать список в качестве ключа в словаре. Это потому, что только неизменяемый объект может использоваться в качестве ключа в словаре. Таким образом, при необходимости мы можем использовать кортежи в качестве ключей словаря.

Давайте посмотрим на пример, демонстрирующий разницу между списками и кортежами с точки зрения неизменности.

Создадим список разных имен:

 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 "<pyshell#7>", line 1, in <module> 
 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'] 

Выходные данные показывают, что в список добавлено четвертое имя. Для этого мы использовали функцию append() Мы могли бы добиться того же с помощью функции insert() как показано ниже:

 list_names = ['Nicholas', 'Michelle', 'Alex'] 
 list_names.insert(3, "Mercy") 
 print(list_names) 

Выход:

 ['Nicholas', 'Michelle', 'Alex', 'Mercy'] 

Выходные данные снова показывают, что в список добавлен четвертый элемент.

Кортеж Python не дает нам возможности изменить его размер.

Заключение

Мы можем сделать вывод, что, хотя и списки, и кортежи являются структурами данных в Python, между ними есть заметные различия, главное отличие в том, что списки изменяемы, а кортежи неизменны. Список имеет переменный размер, а кортеж - фиксированный. Операции с кортежами могут выполняться быстрее, чем операции со списками.

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus