Словарь и множество (dict, set)

⭐️Список и кортеж • Список и кортеж
Немного копнем поглубже словари и сеты -как работают под капотом, почему такие быстрые при поиске, какие могут быть грабли и каверзные вопросы на собеседовании.
1) dict - словарь, отображение, хеш-мап, ассоциативный массив, коллекция пар ключ-значение,
где ключом может быть только hashable тип, доступ по ключу и проверка наличия ключа O(1), с питона 3.7 хранит порядок вставки
2) пустой словарь создавать лучше через {},а не dict(), под капотом сразу будет создано 8 элементов
3) set - множество, хешсет, неупорядоченный набор hashable объектов, доступ и проверка наличия O(1)
4) frozenset - неизменяемый брат множества
5) Hashable != Immutable, эти понятия часто путают, помните что это не одно и то же.
6) алгоритм работы словаря и сета: Получаем хеш -} высчитываем позицию в массиве -} если элемента нет то действуем соответственно задаче -} если элемент есть то сравниваем ключ == тому что ищем -} если ключ не равен искомому то ищем дополнительный бакет
7) По умолчанию самописные классы возвращают хеш основанный на id, если переопределяете хеш, то всегда проверяйте, что у равных объектов одинаковый хеш
8) Проверка на содержание тоже вызывает ошибку, если элемент не хешируем. Тапл можно положить в сет только если все его элементы хешируемы, frozenset без проблем кладется в сет. Словари и сеты нельзя положить в словари(как ключ) и сеты.
9) За скорость словаря и сета мы платим большей памятью и тем, что положить туда можно не любые элементы
Читать:
"High Performance Python" by Micha Gorelick and Ian Ozsvald
"Fluent Python" by Luciano Ramalho
docs.python.org/3/glossary.ht...
docs.python.org/3/library/fun...
docs.python.org/3/glossary.ht...
Присоединяйтесь к помощи каналу, будет интересно)
✔️Бусти boosty.to/python_russian/donate
✔️Юмани 410011506612886
Будь первым везде и всегда, включай уведомления о новых выпусках 🔔
#Python #PythonRussian #PyCharm

Пікірлер: 33

  • @PythonRussian
    @PythonRussian Жыл бұрын

    друзья, видео и так большое получилось, забыл добавить, что за скорость словаря и сета мы платим памятью, а также тем, что класть туда можно не все что угодно. Не забывайте подписаться на канал.

  • @Miron_MipoX
    @Miron_MipoX11 ай бұрын

    '''В разных ячейках, но один и тот же кот" - это уже какая-то квантовая запутанность)

  • @sgst555
    @sgst55511 ай бұрын

    дядька, безмерная благодарность за уроки.. Фишка твоих объяснений в том что с одной стороны они подробные и понятные даже начинающим, а с другой - нет присущего многим авторам академизма... удивительно что так мало подписчиков, первое время даже думал что канал фейковый, типа просто натырил уроки ) Вдохновения для новых видосов!

  • @momanddad7801
    @momanddad7801 Жыл бұрын

    Сегодня собес на Middle. За три дня пересмотрел и законспектировал весь твой канал. Большое спасибо!

  • @PythonRussian

    @PythonRussian

    Жыл бұрын

    удачи! если будет возможность и желание -отпишись потом и по результатам и по тому что спрашивали. Можно в почту.

  • @banywick8250
    @banywick82502 ай бұрын

    контент супер! Спасибо за пояснениею

  • @user-sj3fx6oo7u
    @user-sj3fx6oo7uАй бұрын

    Спасибо за качественный контент! Кстати, в настройках можно установить пакет проверки синтаксиса для русского языка, чтобы PyCharm перестал ругаться на "опечатки", при использовании кириллицы.

  • @user-dj4sk6uo7p
    @user-dj4sk6uo7p Жыл бұрын

    Врсхищаюсь вашей подаче и структурировано информации! Это идеально! Я только после ваших видео более менее стал ориентироваться в ООП. Сейчас структуры данных повторил!🔥🔥🔥🔥

  • @Insidepointg
    @Insidepointg Жыл бұрын

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

  • @PythonRussian

    @PythonRussian

    Жыл бұрын

    пока нет, темы специфические и не всем нужны, я думал на тему потоков/ГИЛ рассказать в следующий раз

  • @andrewdabarow9822
    @andrewdabarow9822 Жыл бұрын

    Очень полезное видео, спасибо за ваши труды, особенная благодарность за то, что Вы прислушиваетесь к просьбам подписчиков.

  • @exfell320
    @exfell320 Жыл бұрын

    Пока ждал новый ролик уже успел бросить питон и пойти учить вышмат. Но на будущее в самый раз :)

  • @user-ke9be9pv9g
    @user-ke9be9pv9g11 ай бұрын

    Большое спасибо за контент! Все очень понятно и полезно! Как по мне, лучший русскоязычный канал по python. Хотелось бы еще видеть практическое применение той или иной темы. Имею в виду задачи, близкие к тем, что встречаются в реальной практике. Я думаю что это позволит лучше понять надобность той или иной темы.

  • @di.n.1906
    @di.n.190611 ай бұрын

    Спасибо больше! Ваш канал просто находка !!

  • @kohakovich
    @kohakovich Жыл бұрын

    Отличное видео. Всегда узнаю для себя много нового.

  • @moonboyforever
    @moonboyforever Жыл бұрын

    Класс! Благодарю Вас! ❤❤❤

  • @barma1309
    @barma130911 ай бұрын

    Отличный видос!

  • @SoloveY1990
    @SoloveY1990 Жыл бұрын

    Спасибо!!!

  • @quansumonner
    @quansumonner11 ай бұрын

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

  • @hdhdjdjdjjd1263
    @hdhdjdjdjjd12633 ай бұрын

    Привет, очень крутое объяснение, но есть вопрос, ты говоришь что функция timeit() возвращает среднее значение времени выполнения, но в документации пишут, что она возвращает общее количество времени для number выполнений, и усреднение происходит только если мы используем timeit в командной строке. Так вот, что возвращает это функция на самом деле при использовании через api интерфейси

  • @olgalabkovich3699
    @olgalabkovich3699 Жыл бұрын

    Спасибо за такие видео)))) А можете сделать видео про аллокацию памяти в python)

  • @PythonRussian

    @PythonRussian

    Жыл бұрын

    не думал пока о такой теме, не уверен что будет интересно многим

  • @OnlyElf
    @OnlyElf Жыл бұрын

    7:05 - Оговорка. Имел ввиду фигурные, а сказал круглые.

  • @hdhdjdjdjjd1263
    @hdhdjdjdjjd12633 ай бұрын

    Еще один вопрос, связанный с коллизиями, к примеру у элемнтов a и A одинаковый хэш, мы добавили сначала элемент a в словарь, а затем добавили элемент A где у нас уже задействовалась функция для коллизий, затем мы удаляем элемент a, и после этого попробовав проверить наличие элемента A в нашем словаре, мы попадем в пустую ячейку в которой лежал элемент a, как интерпретатор поймет что нужно пойти дальше, воспользовавшись функцией для коллизии и найти наш элемент A

  • @PythonRussian

    @PythonRussian

    3 ай бұрын

    я не знаю как конкретно работает питон в таком случае, это надо покопать для конкретики, могу только предположить. Или при удалении первого элемента остальные с таким хешем перемещаются (так чтобы в ячейке а оказался А), но это маловерятно, ИЛИ при удалении в ячейке остается некий флаг, встретив который интерпретатор и понимает, что хотя тут пусто, но можно поискать дальше по формуле коллизий.

  • @hdhdjdjdjjd1263

    @hdhdjdjdjjd1263

    3 ай бұрын

    @@PythonRussian благодарю

  • @5544ww
    @5544ww9 ай бұрын

    6:21 dict() это конструктор?

  • @myxapg4758
    @myxapg47589 ай бұрын

    Почему словарь - это упорядоченная коллекция, а сеты нет? Если дикт запоминает в какой последовательности в него добавлялись значения, то почему этого не запоминает сет?

  • @PythonRussian

    @PythonRussian

    9 ай бұрын

    важная способность программиста -задавать правильные вопросы. И ваш вопрос -правильный. Раньше (до версии 3.7) и словари не хранили порядок, но потом смогли, а в чем именно разница можете погуглить или поискать в рекомендованных книгах. Есть отличное видео по словарям от Хеттингера.

  • @myxapg4758

    @myxapg4758

    9 ай бұрын

    ​@@PythonRussian, спасибо, нашёл плейлист с его участием на ютубе, обязательно посмотрю) И книги добавлю в to-do лист)

  • @user-gt4zh2wb3d
    @user-gt4zh2wb3d9 ай бұрын

    Можно уже щёлканье клавы сделать наконец потише?

  • @PythonRussian

    @PythonRussian

    9 ай бұрын

    увы -нет, это не только от нее зависит, еще микрофон стоит за ней, да и атмосфера на канале именно такая - то звук плохой то изображение мелкое, главное -суть

  • @user-gt4zh2wb3d

    @user-gt4zh2wb3d

    9 ай бұрын

    @@PythonRussian Ну суть объяснять у вас получается хорошо, это уже отмечали неоднократно. А технические мелочи не так уж тяжело устранить - поставить клаву на что-то мягкое и микрофон поближе ко рту переместить, разрешение тоже меняется бесплатно. Не у всех же здоровенные мониторы и идеальное зрение.