Списки, кортежи, словари и множества
В чем отличие между кортежами и списками?
Основные различия между кортежами и списками:
Кортежи (tuples):
-
Кортежи - неизменяемые упорядоченные коллекции объектов.
-
Элементы кортежа не могут быть изменены после создания.
-
Создаются с использованием круглых скобок:
(). -
Используются, когда необходима коллекция, которая не должна изменяться.
Списки (lists):
-
Списки - изменяемые упорядоченные коллекции объектов.
-
Элементы списка могут быть изменены, добавлены или удалены после создания.
-
Создаются с использованием квадратных скобок:
[]. -
Используются, когда необходима коллекция, которая может быть изменена или модифицирована.
Какие функции предоставляются для работы со списками в Python?
Выделяют основные функции для работы со списками:
-
append(): Добавляет элемент в конец списка. -
extend(): Расширяет список, добавляя элементы из другого списка. -
insert(): Вставляет элемент на указанную позицию. -
remove(): Удаляет первое вхождение элемента с указанным значением. -
pop(): Удаляет элемент с указанным индексом и возвращает его значение. -
clear(): Удаляет все элементы из списка. -
index(): Возвращает индекс первого вхождения элемента с указанным значением. -
count(): Возвращает количество вхождений элемента с указанным значением. -
sort(): Сортирует элементы списка. -
reverse(): Изменяет порядок элементов на обратный. -
copy(): Создает копию списка.
Какая операция выполняется быстрее: проверка наличия элемента в списке или в множестве?
В множестве проверка наличия элемента выполняется быстрее, чем в списке. В множестве элементы хранятся в хэш-таблице, что обеспечивает константное время доступа к элементам в среднем случае. В списке же для проверки наличия элемента нужно пройти по всему списку, что требует времени пропорционально размеру списка, то есть O(n), где n - количество элементов в списке.
Какие объекты могут выступать в качестве ключей в словаре и почему именно они выбираются в качестве ключей?
Ключ словаря должен быть хешируемым: его хеш не меняется за время жизни, а равные ключи имеют равные хеши. Числа и строки подходят; кортеж подходит, только если хешируемы все его элементы. Неизменяемость сама по себе не гарантирует хешируемость. Экземпляры пользовательских классов по умолчанию хешируемы по идентичности.
Как происходит в памяти компьютера инициализация списков, кортежей, что занимает меньше памяти?
При инициализации списков и кортежей в памяти компьютера происходит выделение памяти для хранения элементов данных. Вот основные различия между списками и кортежами в плане памяти:
-
Списки
(list):-
Списки являются изменяемыми структурами данных, поэтому они требуют дополнительной памяти для хранения информации о размере списка, его емкости (capacity), а также ссылок на элементы.
-
В списке элементы могут быть добавлены, удалены или изменены, поэтому список должен быть организован таким образом, чтобы его можно было динамически изменять.
-
Это делает списки менее эффективными с точки зрения использования памяти, особенно для больших списков.
-
-
Кортежи
(tuple):-
Кортежи являются неизменяемыми структурами данных, поэтому они требуют меньше памяти, чем списки.
-
Кортеж хранит свой размер и ссылки на элементы, но ему не нужен резерв ёмкости для последующего добавления элементов.
-
Это делает кортежи более компактными и эффективными с точки зрения использования памяти, особенно если требуется хранить данные, которые не будут изменяться.
-
Где быстрее искать значение по ключу - в словаре или dicts в Python?
Словарь в Python и dict обозначают один встроенный тип. Отдельного встроенного типа dicts нет. Поиск по ключу в dict в среднем занимает O(1), а в худшем случае O(n). Если в вопросе подразумевается сторонняя обёртка, сначала нужно уточнить её название и реализацию.