![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
antsh85 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 2.1.2008 Репутация: нет Всего: нет |
в чём разница между "==" и "is"
по идее в одном случае должна проверяться ссылка на объект, а в другом его реальный валуе - по крайней мере так в яве. |
|||
|
||||
kosmonaFFFt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 538 Регистрация: 14.4.2008 Где: Иннополис Репутация: нет Всего: 5 |
== проверяет равенство объектов, is - принадлежность объекта классу,
но я могу и ошибаться... -------------------- ![]() |
|||
|
||||
Void |
|
||||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 10 Всего: 173 |
Совершенно верно. == — это структурное равенство (переопределяется методом __cmp__), is — это равенство ссылок.
-------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
||||
|
|||||
Fatkh |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 5.9.2009 Репутация: нет Всего: 1 |
Оператор == проверяет, равны ли значения объектов. Оператор is проверяет, один и тот же это объект в памяти или нет. Фактически он сравнивает указатели, через которые реализованы ссылки. Так, если l = ['a', 'b'] m = ['a', 'b'] то: >>> l == m True >>>l is m False |
|||
|
||||
_Viper_ |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 87 Регистрация: 8.11.2006 Репутация: 10 Всего: 11 |
||||
|
||||
Fatkh |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 5.9.2009 Репутация: нет Всего: 1 |
Но, если быть совсем честными, то никто не гарантирует, что
>>> a = [1, ] >>> b = [1, ] >>> a is b False >>> a == b True На самом деле если (вдруг) создателям интерпретатора захочется, они могут закешировать первый список, и тогда ссылаться будут a и b на одно и то же. Для целых чисел так и сделано. То есть на is лучше никогда не полагаться. |
|||
|
||||
antsh85 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 2.1.2008 Репутация: нет Всего: нет |
спасибо всем больше за разъяснения.
|
|||
|
||||
_Viper_ |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 87 Регистрация: 8.11.2006 Репутация: 10 Всего: 11 |
Зато сравнение через is происходит намного быстрее и если надо сравнить переменную с None, то советуют делать это именно через is. Да и кешировать списки не будут поскольку это изменяемые обьекты, потом проблем не оберёшся с таким кешированием. |
|||
|
||||
Fatkh |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 5.9.2009 Репутация: нет Всего: 1 |
Не спорю. И никто не будет кешировать списки), конечно. Просто перед использованием is стоит подумать, сработает ли. |
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Python: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |