В чем отличие списка от кортежа
Списки – это изменяемые последовательности, обычно используемые для хранения однотипных данных (хотя Python не запрещает хранить в них данные разных типов). Представлены классом list.
Кортежи – это неизменяемые последовательности, обычно используемые, чтобы хранить разнотипные данные. Представлены классом tuple.
На уровне языка отличаются тем, что в кортеж нельзя добавить или убрать элемент. На уровне интерпретатора различий нет. Обе коллекции представлены массивом указателей на структуру PyObject
.
Для списка определены функции, которые добавляют в такой массив новый элемент, удаляют имеющийся, соединяют два массива в один. Они вызываются методами списка .append()
, .pop()
, .sort()
и т.д.
Oct. 10, 2023, Источник
- Список изменяемый, а кортеж — нет
- Кортеж может выступать в качестве ключа в словаре или элементам множества
- Кортеж занимает меньше места в памяти, т.к. имеет фиксированную длину
a = (1, 2, 3, 4, 5, 6)
b = [1, 2, 3, 4, 5, 6]
print(a.__sizeof__()) # 72
print(b.__sizeof__()) # 88
- Кортеж работает быстрее списка, из-за особенностей хранения в памяти. Для того, чтобы снизить фрагментацию памяти и ускорить создание кортежей, Python переиспользует старые кортежи, которые были удалены. Если кортеж состоит из менее чем 20 элементов и больше не используется, то вместо удаления Python помещает его в специальный список, в котором хранятся свободные для повторного использования кортежи
- Кортежи поддерживают неограниченный уровень вложенности
- Пустой кортеж работает как синглтон, т.е. в памяти запущенного Python скрипта всегда находится только один пустой кортеж. Все пустые кортежи просто ссылаются на один и тот же объект, это возможно благодаря тому, что кортежи неизменяемы. Такой подход сохраняет много памяти и ускоряет процесс работы с пустыми кортежами.
Oct. 10, 2023, Источник
Списки Python схожи с массивами в других языках. Кортеж похож на список, но вы создаете его с круглыми скобками, вместо квадратных. Вы также можете использовать встроенный инструмент для создания кортежей. Разница между списками и кортежами в том, что кортеж неизменяем, в то время как список изменяем. Т.е. в список можно добавить элемент и его адрес в памяти не изменится, а если нужно добавить элемент в кортеж, то нужно создать новый кортеж, и у него уже будет новый адрес в памяти:
# список
a = [1,2]
id(a) # 2044364987904
a.append(3)
id(a) # 2044364987904
# кортеж
a = (1,2)
id(a) # 2044370285184
a = (1,2,3)
id(a) # 2044369999872
Важно: кортеж занимает меньше места в памяти чем список, и поэтому всегда, когда массив объектов заведомо неизменяем, рекомендуется использовать кортежи, вместо списков.
Oct. 10, 2023, Источник
Список (list) и кортеж (tuple) - это две различные структуры данных, которые обладают следующими основными различиями:
1. Изменяемость:
- Списки изменяемы, что означает, что их элементы могут быть изменены после создания списка.
- Кортежи неизменяемы, их элементы не могут быть изменены после создания кортежа.
2. Синтаксис:
- Списки создаются с использованием квадратных скобок `[ ]`, например: `[1, 2, 3]`.
- Кортежи создаются с использованием круглых скобок `( )`, например: `(1, 2, 3)`.
3. Производительность:
- В общем случае, кортежи работают быстрее, чем списки, потому что они неизменяемы и Python может проводить оптимизации, которые не доступны для списков.
4. Использование:
- Списки обычно используются там, где требуется изменяемая коллекция, например, когда вы планируете добавлять, удалять или изменять элементы списка.
- Кортежи обычно используются для представления фиксированных коллекций элементов, которые не должны изменяться, или для передачи неизменяемых последовательностей данных в функции, где изменяемость нежелательна.
Пример использования списков:
my_list = [1, 2, 3]
my_list.append(4)
print(my_list) # Вывод: [1, 2, 3, 4]
Пример использования кортежей:
my_tuple = (1, 2, 3)
# my_tuple[0] = 5 # Это вызовет ошибку, так как кортежи неизменяемы
print(my_tuple) # Вывод: (1, 2, 3)
Если ваши данные должны оставаться неизменными, лучше использовать кортежи. Если вам нужна изменяемость, используйте списки.
Feb. 16, 2024, easyoffer