| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Python: Общие вопросы > в чём разница между "==" и "is" |
| Автор: antsh85 21.9.2009, 19:28 |
| в чём разница между "==" и "is" по идее в одном случае должна проверяться ссылка на объект, а в другом его реальный валуе - по крайней мере так в яве. |
| Автор: kosmonaFFFt 21.9.2009, 19:34 |
| == проверяет равенство объектов, is - принадлежность объекта классу, но я могу и ошибаться... |
| Автор: Fatkh 21.9.2009, 19:46 | ||
Оператор == проверяет, равны ли значения объектов. Оператор is проверяет, один и тот же это объект в памяти или нет. Фактически он сравнивает указатели, через которые реализованы ссылки. Так, если l = ['a', 'b'] m = ['a', 'b'] то: >>> l == m True >>>l is m False |
| Автор: _Viper_ 21.9.2009, 19:47 | ||||
несовсем так, проще всего показать на примере
|
| Автор: Fatkh 21.9.2009, 19:51 |
| Но, если быть совсем честными, то никто не гарантирует, что >>> a = [1, ] >>> b = [1, ] >>> a is b False >>> a == b True На самом деле если (вдруг) создателям интерпретатора захочется, они могут закешировать первый список, и тогда ссылаться будут a и b на одно и то же. Для целых чисел так и сделано. То есть на is лучше никогда не полагаться. |
| Автор: antsh85 21.9.2009, 21:19 |
| спасибо всем больше за разъяснения. |
| Автор: _Viper_ 22.9.2009, 14:49 | ||
Зато сравнение через is происходит намного быстрее и если надо сравнить переменную с None, то советуют делать это именно через is. Да и кешировать списки не будут поскольку это изменяемые обьекты, потом проблем не оберёшся с таким кешированием. |
| Автор: Fatkh 22.9.2009, 15:12 | ||
Не спорю. И никто не будет кешировать списки), конечно. Просто перед использованием is стоит подумать, сработает ли. |