🤔 Что использовать в python: is или ==?
Привет, друзья! Надеюсь, вы уже успели немного отдохнуть. Сегодня мы с вами обсудим интересную тему, кстати вопросы по ней вполне могут вам задать на собеседовании.
⚠️ Как вы знаете, в python есть два очень похожих оператора для проверки равенства двух объектов. Эти два оператора is и ==. Почему важно о них вспомнить? is и == обычно путают друг с другом, потому что с простыми типами данных они, кажется, делают то же самое.
Смотрите на первую картинку в карусели 👉
🧐 Однако, если провести эксперимент со сложными типами данных, мы убедимся, что поведение is и == отличается.
Смотрите на вторую картинку в карусели 👉
✅ На этом шаге, мы делаем вывод, что разница между is и == заключается в том, что is проверяет идентичность объектов, а == проверяет равенство значения. Смотрите на третью картинку в карусели 👉
Давайте эту мысль разберем на примере.
⁉️ Почему же так происходит?
Чтобы более подробно рассмотреть концепцию изменчивости, воспользуемся м функцией id(), которая выводит уникальный идентификатор для каждого объекта.
Мы заметим, что переменные list_1 и list_2 ссылаются на один и тот же объект в памяти, однако, если мы создаем новую переменную list_3, пусть даже с тем же значением, что и у list_1 и list_2, в памяти создается новый объект, для которого выделено отличное от list_1 и list_2 место в памяти.
Смотрите на четвертую картинку в карусели 👉
⚠️ Важное наблюдение: с простыми типами данных концепция изменчивости работает в обе стороны: объекты идентичны и равны между собой. Это происходит потому, что python обрабатывает неизменяемые типы данных (int, float, decimal, bool, string, tuple) иначе, чем изменяемые, то есть сохраняет их в памяти только один раз. Со сложными типами данных работа с памятью происходит иначе: при создании нескольких объектов с одинаковыми значениями, будут создаваться новые объекты в памяти.
Давайте подведем краткие итоги:
✔️ == проверяет равенство (по значению) и is проверяет идентичность двух объектов, то есть проверяет их адреса в памяти.
✔️ Используйте is, когда хотите сравнить объект с None.
✔️ Обычно is быстрее, чем оператор ==, так как он проверяет целочисленное равенство адреса в памяти.
✔️ Будьте аккуратны с операторами != и is not. Поэкспериментируйте с ними на примерах, которые разобраны выше, вы увидите, что их принцип работы немного отличается.
Привет, друзья! Надеюсь, вы уже успели немного отдохнуть. Сегодня мы с вами обсудим интересную тему, кстати вопросы по ней вполне могут вам задать на собеседовании.
⚠️ Как вы знаете, в python есть два очень похожих оператора для проверки равенства двух объектов. Эти два оператора is и ==. Почему важно о них вспомнить? is и == обычно путают друг с другом, потому что с простыми типами данных они, кажется, делают то же самое.
Смотрите на первую картинку в карусели 👉
🧐 Однако, если провести эксперимент со сложными типами данных, мы убедимся, что поведение is и == отличается.
Смотрите на вторую картинку в карусели 👉
✅ На этом шаге, мы делаем вывод, что разница между is и == заключается в том, что is проверяет идентичность объектов, а == проверяет равенство значения. Смотрите на третью картинку в карусели 👉
Давайте эту мысль разберем на примере.
⁉️ Почему же так происходит?
Чтобы более подробно рассмотреть концепцию изменчивости, воспользуемся м функцией id(), которая выводит уникальный идентификатор для каждого объекта.
Мы заметим, что переменные list_1 и list_2 ссылаются на один и тот же объект в памяти, однако, если мы создаем новую переменную list_3, пусть даже с тем же значением, что и у list_1 и list_2, в памяти создается новый объект, для которого выделено отличное от list_1 и list_2 место в памяти.
Смотрите на четвертую картинку в карусели 👉
⚠️ Важное наблюдение: с простыми типами данных концепция изменчивости работает в обе стороны: объекты идентичны и равны между собой. Это происходит потому, что python обрабатывает неизменяемые типы данных (int, float, decimal, bool, string, tuple) иначе, чем изменяемые, то есть сохраняет их в памяти только один раз. Со сложными типами данных работа с памятью происходит иначе: при создании нескольких объектов с одинаковыми значениями, будут создаваться новые объекты в памяти.
Давайте подведем краткие итоги:
✔️ == проверяет равенство (по значению) и is проверяет идентичность двух объектов, то есть проверяет их адреса в памяти.
✔️ Используйте is, когда хотите сравнить объект с None.
✔️ Обычно is быстрее, чем оператор ==, так как он проверяет целочисленное равенство адреса в памяти.
✔️ Будьте аккуратны с операторами != и is not. Поэкспериментируйте с ними на примерах, которые разобраны выше, вы увидите, что их принцип работы немного отличается.