Для чего используется is python
Перейти к содержимому

Для чего используется is python

  • автор:

В чем различие == и IS в Python?

Сейчас нахожусь на начальной стадии изучения языка. Не совсем понятно отличие IS и Is Not от == и !=
В литературе указано что Is и Is Not проверяют принадлежность к одному объекту, а операторы сравнения сравнивают
Но на практике
a = 1 и b=1
a is b возвращает true
пойдем дальше
a= 2+2 b=2+4-2 — все равно true
Ладно, сравним eval(«2+2») is eval(«2+4-2») — True
О каких тогда объектах идет речь? Не ужели о экземплярах класса, а не переменных

  • Вопрос задан более трёх лет назад
  • 49064 просмотра

1 комментарий

Средний 1 комментарий

>>> x = eval(«2+2»)
>>> y = eval(«2+4-2»)
>>> x is y
True # because look below
>>> id(x)
1713436640
>>> id(y)
1713436640

Решения вопроса 1

yashnikov

— оператор == проверяет равенство значений двух объектов
— оператор is проверяет идентичность самих объектов. Его используют, чтобы удостовериться, что переменные указывают на один и тот же объект в памяти

Python (CPython, если быть точнее) в целях производительности кеширует короткие строки и малые целые числа, поэтому возможны такие казусы:

>>> str1 = 'hello' >>> str2 = 'hello' >>> str1 == str2 True >>> str1 is str2 True >>>

Но стоит сделать строку длиннее и всё встаёт на свои места:

>>> str1 = 'hello, my crazy world' >>> str2 = 'hello, my crazy world' >>> str1 == str2 True >>> str1 is str2 False

Ответ написан более трёх лет назад
Нравится 20 2 комментария
Vladimir Yashnikov скажите, для какой версии это работало? я пробую на 3.7.0 и вижу следующее.
Два одинаковых стакана несмотря на свою одинаковость, все же разные стаканы 🙂
Ответы на вопрос 3

mututunus

Backend developer (Python, Golang)

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

Ответ написан более трёх лет назад
Комментировать
Нравится 4 Комментировать

Экземпляр класса — это и есть объект, а переменная это просто имя, которому сопоставлено некоторое значение. А так как в Python любое значение — это объект (экземпляр) какого-то класса, то операторы is и == всегда применяются к значениям переменных, то есть к объектам (экземплярам) класса.

А чтобы понять различия между операторами is и == запустите этот код и посмотрите на вывод:

class AlwaysEqual(object): def __eq__(self, other): return True instance = AlwaysEqual() print (instance == 42) # True print (instance is 42) # False print (instance is AlwaysEqual()) # False print (instance is instance) # True

Это пример класса, любой экземпляр которого всегда равен ( == ) всему, чему угодно.
В то же время, экземпляр этого класса не является ( is ) другим экземпляром этого же класса и ничем другим кроме самого себя.

Ответ написан более трёх лет назад
Комментировать
Нравится 3 Комментировать

sim3x

The current implementation keeps an array of integer objects for all integers between -5 and 256, when you create an int in that range you actually just get back a reference to the existing object. So it should be possible to change the value of 1. I suspect the behaviour of Python in this case is undefined. 🙂

Python

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

Освойте профессию
«Fullstack-разработчик на Python»

Для чего нужен Python

Data Science и машинное обучение. Эти два направления IT тесно связаны друг с другом. Наука о данных заключается в обработке больших массивов информации из базы данных, а машинное обучение — в разработке компьютерных алгоритмов, способных учиться на ней и делать точные прогнозы. В Data Science используют Python для включения очистки и разметки данных, поиска и обработки статистической информации, ее визуализацию в виде диаграмм, графиков и т.д. С помощью библиотеки Python ML классифицируются изображения, тексты, поисковый трафик, осуществляется распознавание лиц и речи, глубинное машинное обучение.

Веб-разработка. Многие крупные интернет-компании, такие как Google, Facebook, программируют на Python свои самые известные проекты, например, Instagram, YouTube, Dropbox и т.д. Этот язык позволяет вести веб-разработку на стороне сервера, потому что его обширная библиотека включает множество решений как раз для реализации сложных серверных функций. За счет своей простоты использования Python широко применяется небольшими командами и одиночными разработчиками для создания сайтов, десктопных и мобильных веб-приложений.

Разработка и тестирование ПО. Возможности Python используются тестировщиками и разработчиками для поиска и исправления ошибок, автоматической сборки, разработки прототипов программного обеспечения, управления проектами и т.д. Кроме того, с помощью сред модульного тестирования «Питона» осуществляется проверка функций. Также на этом языке создаются тестовые скрипты, имитирующие различные сценарии использования ПО. Разработчики аппаратных платформ (например, IBM, Hewlett-Packard, Intel) тоже используют Python для тестирования своей продукции.

Профессия / 16 месяцев
Тестировщик-автоматизатор

Лучший выбор для быстрого старта в IT

cables (2)

История разработки и названия

Язык программирования Python был создан в 1989–1991 годах голландским программистом Гвидо ван Россумом. Изначально это был любительский проект: разработчик начал работу над ним, просто чтобы занять себя на рождественских каникулах. Хотя сама идея создания нового языка появилась у него двумя годами ранее. Имя ему Гвидо взял из своей любимой развлекательной передачи «Летающий цирк Монти Пайтона». Язык программирования он и выбрал — Python, что это означало название комик-группы. Это шоу было весьма популярным среди программистов, которые находили в нем параллели с миром компьютерных технологий.

Логотип Python

История развития Python включает несколько этапов, каждый из которых заканчивался выходом новой версии:

  • В 1991 году Гвидо опубликовал первую версию (0.9.0) языка, включающую базовые возможности — в частности, работу с данными различных типов и корректировку ошибок.
  • Через три года вышла версия 1.0, в которой функционал был дополнен обработкой списков данных: систематизацией, фильтрацией, сокращением, сопоставлением.
  • Версия 2.0 была опубликована в 2000 году и отличалась исправленными недочетами прежних версий, а также новыми полезными функциями для программистов — в частности, поддержкой Unicode и облегченной методикой циклического просмотра списка.
  • В 2008 году представлена версия Python 3, включившая возможность печати, поддержку деления чисел и расширенное исправление ошибок.

Язык программирования «Питон», начавшийся как проект одного человека, сегодня развивается и поддерживается командой разработчиков. В 2001 году они объединились в некоммерческую организацию Python Software Foundation, целями которой стали популяризация и совершенствование языка в сообществе программистов, контроль над интеллектуальными правами, проведение тематических конференций и т.д.

Читайте также Востребованные IT-профессии 2023 года: на кого учиться онлайн

Философия языка Python

Как и многие другие языки программирования, Python развивается в рамках общей концепции, которая сформулирована в так называемом The Zen of Python (Дзене Питона). В соответствии со своим названием она изложена в виде коротких изречений, напоминающих дзен-буддистские коаны, например:

  • красивое лучше, чем уродливое;
  • явное лучше, чем неявное;
  • простое лучше, чем сложное.

В целом, ответив на вопрос что такое python, и, если свести концепцию «Питона» к общим принципам, они будут выглядеть следующим образом:

  • cтремление к простоте и интуитивной воспринимаемости кода;
  • простые, но строгие правила с минимальным числом исключений и множественных трактовок;
  • ориентированность на выполнение практических задач и поиск очевидных решений.

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

Характеристики Python

Интерпретируемость. В «Питоне» операторы кода исполняются последовательно с помощью программы-интерпретатора. Если по ходу исполнения программы встречается ошибка, оно сразу же прекращается. Это позволяет Python-разработчику быстро обнаружить и устранить недочеты, но в то же время снижает производительность.

Динамическая типизация. Это автоматическое связывание переменной и типа в момент, когда ей присваивается определенное значение. Такой механизм ускоряет написание программы в различных ситуациях (например, при работе с переменными данными), но повышает вероятность ошибки.

Язык высокого уровня. Python по своему синтаксису и грамматике близок к естественным языкам. Благодаря этому программисту с его помощью легче описать различные структуры данных и операции, что также ускоряет и упрощает написание кода. Кроме того, это делает ПО, написанное на «Питоне», менее зависимым от платформы.

Объектно-ориентированность. Написанная на «Питоне» программа представляет собой совокупность объектов, каждому из которых присвоены определенный класс и место в иерархии. Таким образом проще управлять процессом программирования, что особенно важно при создании сложных проектов.

Станьте Fullstack-разработчик на Python и найдите стабильную работу
на удаленке

Преимущества Python

Простота и воспринимаемость. Язык «Питон» специально создан похожим по своему синтаксису на естественные языки (прежде всего английский). Блоки кода в нем отделяются друг от друга пробельными отступами. Это делает код, написанный на Python, более удобочитаемым и понятным для программистов. Минималистичный синтаксис также позволяет реже обращаться к документации и писать меньше строк кода, что, в свою очередь, ускоряет работу над проектом.

Синтаксис Python

Обширная библиотека. Программисты и сообщество пользователей «Питона» создали для этого языка большую библиотеку, в которой содержатся оптимизированные и многократно используемые фрагменты кода для решения практически любых задач. Благодаря этому программисту не нужно писать код полностью с нуля, что также ускоряет работу над проектом или анализом данных. Кроме того, сообщество пользователей Python создало множество сторонних библиотек с дополнительными материалами, а также обширную сеть форумов, на которых делятся опытом и решениями.

Совместимость. Интерпретатор Python может интегрироваться с другими языками программирования — например, с Java, C и C++. Благодаря этому Python-разработчики могут расширять функциональность своего проекта, подключая к нему их возможности. Верно и обратное: программы, написанные на указанных языках программирования, можно сочетать с модулями, созданными с помощью «Питона».

Мультиплатформенность. Программы, написанные на Python, адаптированы ко всем существующим аппаратным и программным платформам. Язык используется для работы на разных устройствах, от мейнфреймов до смартфонов и карманных компьютеров под управлением операционных систем Microsoft Windows, MacOS, iOS, Android, UNIX, Linux, Symbian, PalmOS и т.д. Это создает широчайшие возможности для разработки программных продуктов различного назначения, адаптированных под разные платформы.

Мультипарадигменность. На «Питоне» можно программировать в различных парадигмах: объектно-ориентированной, функциональной, императивной, процедурной, структурной и т.д. Это достигается за счет подключения дополнительных библиотек, интерпретаторов и фреймворков. Мультипарадигменность позволяет расширить выразительные способности языка программирования, решать с его помощью больший спектр задач в рамках одного проекта.

Читайте также Как создать простую игру «Змейка» на Python и Pygame

Недостатки Python

Низкая производительность. Python относится к интерпретируемым языкам программирования, поэтому написанный на нем код исполняется с определенной задержкой и расходом дополнительных ресурсов компьютера. Из-за быстрого роста мощностей этот недостаток в последнее время стал не так ощутим, но на слабых устройствах (например, старых ПК или смартфонах) он все еще является проблемой. Частично она решается с помощью перезаписи особо «трудных» участков кода на других совместимых языках.

Глобальная блокировка интерпретатора (GIL). Эта функция позволяет синхронизировать работу нескольких потоков, поочередно приостанавливая и запуская их. Это снижает риск конфликтов между потоками при обращении к одним и тем же участкам памяти, тем самым защищая данные от разрушения. Однако данная функция также ограничивает параллельность вычислений, снижая их эффективность на многоядерных и многопроцессорных системах.

Синтаксис. Обычно этот аспект Python считается его преимуществом — в частности, за счет простоты, удобочитаемости. Однако многие программисты, привыкшие работать с другими языками, при переходе на «Питон» часто сталкиваются с неудобством некоторых использованных в нем архитектурных решений. Впрочем, эти недостатки обычно заметны на очень высоком уровне программирования и по большей части являются делом привычки.

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

Fullstack-разработчик на Python

Fullstack-разработчики могут в одиночку сделать IT-проект от архитектуры до интерфейса. Их навыки востребованы у работодателей, особенно в стартапах. Научитесь программировать на Python и JavaScript и создавайте сервисы с нуля.

картинка (72)

Статьи по теме:

Где используется язык Python

Python — высокоуровневый язык программирования, появившийся в 1991 году благодаря Гвидо ван Россуму. Программист из Нидерландов создал его, чтобы ускорить разработку, а также сделать код более читаемым и понятным для других разработчиков.

Python — интерпретируемый язык, он выполняется в реальном времени, а не компилируется в машинный код, как C++ или Java.

Для НЕпрограммистов, которые часто сталкиваются с обработкой больших объемов данных Python для анализа данных Начать обучение бесплатно

Где используется Python

Благодаря удобству и простоте пайтон полезен для многих отраслей

Веб-разработка

  • Питон предлагает набор инструментов и фреймворков для разработки веб-приложений.
  • Простой синтаксис ускоряет написание кода. Пайтон также поддерживает пакеты и библиотеки, которые делают разработку веб-приложений более эффективной.
  • Python имеет открытый код, а также коммьюнити разработчиков, создающих новые библиотеки и улучшающих существующие. Это делает веб-разработку доступной.
  • В Python доступны инструменты для работы с БД, включая поддержку СУБД — MySQL, PostgreSQL, Oracle. Питон также поддерживает работу с разными форматами данных — JSON, XML.
  • Python используется для машинного обучения и развития искусственного интеллекта. Это помогает создавать приложения с возможностью внедрения предсказательной аналитики.

Пайтон — один из лучших языков программирования для веб-разработки. Он прост, обладает множеством библиотек, интегрируется с другими технологиями или инструментами.

Data Science

Python — востребован для Data Science благодаря:

  • научным вычислениям с помощью Numpy;
  • продвинутому анализу данных с Pandas;
  • инструментам машинного обучения;
  • визуализации данных с Matplotlib, Seaborn;
  • интерактивной визуализации с помощью Plotly.

Как Python помогает науке о данных:

  • Обработка данных. Python обладает большой мощностью в обработке данных.
  • Визуализация данных. Matplotlib и Seaborn — библиотеки визуализации Python — помогают создавать информативные графики или диаграммы для представления данных. С помощью библиотеки Plotly можно создавать интерактивные картинки, собирать из них целые дашборды.
  • Машинное обучение. Python имеет много библиотек для машинного обучения — Scikit-learn, TensorFlow, PyTorch. Они помогают создавать модели машинного обучения для классификации, регрессии, кластеризации, прогнозирования, динамического ценообразования.
  • Анализ текстов. Python имеет библиотеки для обработки текста — Natural Language Toolkit (NLTK), Gensim. Они помогают проводить анализ текста или его тональности, а также выполнять машинный перевод.

Python — мощный инструмент для работы с данными в области Data Science.

Искусственный интеллект и робототехника

Благодаря простоте, гибкости и разнообразию библиотек для машинного обучения Python используют в робототехнике и для развития искусственного интеллекта.

  • При помощи Python разработчики создают модели машинного обучения — деревья решений, нейронные сети, методы опорных векторов и другие. Библиотеки TensorFlow, Keras, PyTorch и Scikit-learn обеспечивают работу этих методов и их настройку.
  • Пайтон используется при разработке программного обеспечения роботов и автономных систем. Библиотеки Robotics Operating System (ROS), PyRobot предоставляют различные инструменты для управления роботами, взаимодействия с датчиками, анализа данных.
  • Питон используется в областях, связанных с робототехникой или искусственным интеллектом, — обработка естественного языка, компьютерное зрение, робототехнические системы управления.

Пайтон — важный инструмент для разработки искусственного интеллекта, робототехники.

Компьютерные игры

Python не так быстр, как, например — C++, но у него есть плюсы для разработки игр. Питон имеет множество библиотек и фреймворков, которые делают разработку игр более удобной.

Как Python используется для компьютерных игр:

  • Разработка игр. Python имеет множество библиотек — Pygame, PyOpenGL, Pyglet,позволяющих разработчикам создавать игры разных жанров и уровней сложности. Библиотеки Pygame и Pyglet особенно популярны для разработки 2D-игр.
  • Создание искусственного интеллекта для компьютерных игр. Библиотеки TensorFlow и PyTorch могут использоваться для создания нейронных сетей, которые могут управлять поведением персонажей в игре.
  • Создание модулей и инструментов для разработки игр. Например — PyInstaller используется для создания исполняемых файлов из скриптов.

Системное администрирование

Python используется для автоматизации задач системного администрирования:

  • управление серверами;
  • обработка логов;
  • мониторинг сетевой активности

Некоторые способы использования питона для системного администрирования:

  • Автоматизация задач. Пайтон позволяет создавать скрипты, которые могут автоматизировать задачи системного администрирования — создание резервных копий, обновление ПО, управление настройками системы. Это ускоряет рабочие процессы и снижает вероятность ошибок.
  • Управление конфигурацией. Python используется в Ansible, SaltStack. Эти инструменты позволяют настраивать и управлять большим количеством серверов, обеспечивая их согласованность.
  • Мониторинг систем. Python используется для создания инструментов мониторинга, которые могут отслеживать работу систем или процессов, а также предупреждать о проблемах. Например — инструменты мониторинга сетевой активности используют Python для разработки пользовательских плагинов и скриптов.
  • Работа с данными. Пайтон применяют для обработки, анализа данных, собранных со многих серверов. Это позволяет проводить анализ логов, мониторинг БД, а также создавать динамические отчеты.

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

Плюсы и минусы Python

Python — самый популярный язык программирования в мире благодаря многим преимуществам:

  • Простота использования. Python имеет понятный синтаксис, который делает его доступным для начинающих программистов.
  • Универсальность. Пайтон позволяет разработчикам создавать высокоуровневые программы или приложения, которые могут использоваться в широком спектре отраслей.
  • Кроссплатформенность. Python может быть запущен на различных операционных системах — Windows, macOS, Linux, что делает его идеальным для разработки приложений, работающих на различных платформах.
  • Большое количество библиотек и фреймворков. Питон имеет обширную библиотеку, которая позволяет программистам ускорять процесс разработки. Она также помогает решать разные типы задач: научные вычисления, анализ данных, веб-разработка, машинное обучение.
  • Крупное сообщество пользователей. Python имеет огромное сообщество разработчиков, которые делятся знаниями, создают библиотеки или фреймворки, а также обсуждают лучшие практики разработки.

Несмотря на все преимущества, Python также имеет некоторые недостатки:

  • Низкая скорость выполнения некоторых задач. Особенно это заметно при сравнении с C++ или Java.
  • Сложности с многопоточностью. Реализация многопоточности может быть сложной, также она не всегда эффективна.
  • Сложности с некоторыми типами данных. В Python нет строгой типизации, что может привести к трудностям в работе с некоторыми типами данных — даты, времена.

Но почти все недостатки питона устранимы с помощью библиотек. Например, для сложных вычислений используется библиотека Numpy, написанная на C++. Это позволяет использовать понятный и удобный синтаксис питона, но не терять в скорости работы программ. Поэтому Python становится все более востребованным во многих отраслях.

С чего начать изучение Python

Если вы хотите начать изучать Python, следуйте нашим рекомендациям:

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

Чтобы освоить анализ данных и научиться работать с массивными объемами информации, пройдите курс «Python для анализа данных» от HOCK Training. Выберите удобный формат: онлайн-обучение с преподавателем или самостоятельное изучение в любое время. После окончания курса вы получите удостоверение государственного образца о повышении квалификации. Регистрируйтесь сейчас и начните свой путь в мире анализа данных!

is против == в Python – Сравнение объектов

В Python есть два очень похожих оператора для проверки равенства двух объектов. Эти два оператора is и ==.

Их обычно путаются друг с другом, потому что с простыми типами данных, такими как int и string (с которыми многие люди начинают изучать Python), они, кажется, делают то же самое:

x = 5 s = "example" print("x == 5: " + str(x == 5)) print("x is 5: " + str(x is 5)) print("s == 'example': " + str(s == "example")) print("s is 'example': " + str(s is "example"))

Запуск этого кода приведет к:

x == 5: True x is 5: True s == 'example': True s is 'example': True

Это показывает, что == и is возвращает одинаковое значение (True) в этих случаях. Однако, если вы попытались сделать это с более сложной структурой:

some_list = [1] print("some_list == [1]: " + str(some_list == [1])) print("some_list is [1]: " + str(some_list is [1]))
some_list == [1]: True some_list is [1]: False

Здесь становится очевидным, что эти операторы не одинаковы.

Разница заключается в том, что is проверяет идентичность (объектов), а == проверяет равенство (значения).

Вот еще один пример, который может прояснить разницу между этими двумя операторами:

some_list1 = [1] some_list2 = [1] some_list3 = some_list1 print("some_list1 == some_list2: " + str(some_list1 == some_list2)) print("some_list1 is some_list2: " + str(some_list1 is some_list2)) print("some_list1 == some_list3: " + str(some_list1 == some_list3)) print("some_list1 is some_list3: " + str(some_list1 is some_list3))
some_list1 == some_list2: True some_list1 is some_list2: False some_list1 == some_list3: True some_list1 is some_list3: True

Как мы видим, some_list1 по значению равен some_list2 (они оба равны [1]]), но они не идентичны, то есть они не являются одним и тем же объектом, даже если они имеют одинаковые значения.

Тем не менее, some_list1 идентичен some_list3, так как они ссылаются на один и тот же объект в памяти.

Изменяемые и неизменяемые типы данных

Хотя эта часть проблемы теперь может быть понятна (когда мы использовали переменные), может возникнуть другой вопрос:

Почему is и == ведут себя одинаково с простыми значениями типа int и string (например, 5 и «example»), но не ведут себя одинаково со списками (такими как [1])?

В Python есть два типа данных: изменяемые и неизменяемые.

  • Изменяемые типы данных – это типы данных, которые вы можете «менять» со временем
  • Неизменяемые типы данных остаются неизменными (имеют одно и то же место в памяти, что is и проверяет) после их создания.

Изменяемые типы данных: list, dictionary, set и пользовательские классы.

Неизменяемые типы данных: int, float, decimal, bool, string, tuple и range.

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

Таким образом, используя значение 5 для переменной, – это будет то же самое 5, которые вы используете в других местах в вашем коде в одной и той же переменной, и то же самое касается строковых литералов.

Если вы используете строку «example» один раз, каждый раз, когда вы используете «example», это будет точно такой же объект. см. это примечание для дальнейшего разъяснения.

Далее чтобы более подробно рассмотреть эту концепцию изменчивости, используем функцию Python с именем id(), которая выводит уникальный идентификатор для каждого объекта, :

s = "example" print("Id of s: " + str(id(s))) print("Id of the String 'example': " + str(id("example")) + " (note that it's the same as the variable s)") print("s is 'example': " + str(s is "example")) print("Change s to something else, then back to 'example'.") s = "something else" s = "example" print("Id of s: " + str(id(s))) print("s is 'example': " + str(s is "example")) print() list1 = [1] list2 = list1 print("Id of list1: " + str(id(list1))) print("Id of list2: " + str(id(list2))) print("Id of [1]: " + str(id([1])) + " (note that it's not the same as list1!)") print("list1 == list2: " + str(list1 == list2)) print("list1 is list2: " + str(list1 is list2)) print("Change list1 to something else, then back to the original ([1]) value.") list1 = [2] list1 = [1] print("Id of list1: " + str(id(list1))) print("list1 == list2: " + str(list1 == list2)) print("list1 is list2: " + str(list1 is list2))
Id of s: 22531456 Id of the String 'example': 22531456 (note that it's the same as the variable s) s is 'example': True Change s to something else, then back to 'example'. Id of s: 22531456 s is 'example': True Id of list1: 22103504 Id of list2: 22103504 Id of [1]: 22104664 (note that it's not the same as list1!) list1 == list2: True list1 is list2: True Change list1 to something else, then back to the original ([1]) value. Id of list1: 22591368 list1 == list2: True list1 is list2: False

Мы можем видеть, что в первой части примера s вернулся к точно такому же «example» объекту, которому он был назначен в начале, даже если мы изменим значение s за это время.

Однако list не возвращает тот же объект со значением [1], он создает новый объект, даже если он имеет то же значение, что и в первый раз [1].

Если вы запустите приведенный выше код, вы, вероятно, получите разные идентификаторы для объектов, но равенства будут одинаковыми.

Когда использовать is и == ?

Оператор is чаще всего используется, когда мы хотим сравнить объект с None, и обычно рекомендуется ограничить его использование этим конкретным сценарием, если вы действительно (и я действительно имею в виду) не хотите проверить, идентичны ли два объекта.

Кроме того, обычно is быстрее, чем оператор ==, потому что он просто проверяет целочисленное равенство адреса памяти.

Важное примечание: единственная ситуация, когда is работает точно так, как можно было бы ожидать, это с singleton классами или объектами (как например с None). Даже с неизменяемыми объектами бывают ситуации, когда is не работает должным образом.

Например, для больших объектов string, генерируемых некоторой кодовой логикой или большими целыми числами int, is может (и будет) вести себя непредсказуемо. Если вы не пройдете interning (проверку) (т.е. убедитесь, что существует только одна копия string / int), Поведение равенства со всеми различными неизменяемые объектами, которые вы планируете использовать с is будут непредсказуемыми.

Суть в следующем: используйте == в 99% случаев.

Если два объекта идентичны, они также равны, и обратное не всегда верно.

Переопределение операторов == и !=

Операторы != и is not не ведут себя так же, как их «положительные» коллеги (==/is). А именно, != возвращает True, если объекты не имеют одно и то же значение, в то время как is not не возвращает True, если объекты не хранятся в одном и том же адресе памяти.

Еще одно различие между этими двумя операторами заключается в том, что вы можете переопределить поведение == / != для пользовательского класса, в то время как вы не можете переопределить поведение is.

Если вы реализуете собственный метод __eq()__ в своем классе, вы можете изменить поведение операторов == / !=:

class TestingEQ: def __init__(self, n): self.n = n # используя '==', чтобы проверить, оба ли числа # четные, или если оба числа нечетные def __eq__(self, other): if (self.n % 2 == 0 and other % 2 == 0): return True else: return False print(5 == TestingEQ(1)) print(2 == TestingEQ(10)) print(1 != TestingEQ(2))
False True True

Заключение

Короче говоря, == / != проверяет равенство (по значению) и is / is not проверяет идентичность двух объектов, то есть проверяет адреса их памяти.

Однако избегайте использования is если только вы не знаете точно, что делаете, или когда имеете дело с одноэлементными объектами, такими как None, поскольку он может вести себя непредсказуемо.

Добавить комментарий

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