Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 22, 2010 18:23:00

DauR
От:
Зарегистрирован: 2010-04-08
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

оператор "is"

1.

a = 10
b = 10
print(a is b) # True
2.
a = ["Retention", 3, None]
b = ["Retention", 3, None]
print(a is b) # False
Почему в первом случае возвращает True а во втором False? Ведь в обоих случаях они указывают на идентичные элементы…



Офлайн

#2 Дек. 22, 2010 18:47:52

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

оператор "is"

DauR
1.
a = 10
b = 10
print(a is b) # True
потому что они ссылаются на один и тот же объект
>>> a = 10
>>> b = 10
>>> id(a) == id(b)
True

Офлайн

#3 Дек. 22, 2010 20:32:07

sp3
От:
Зарегистрирован: 2010-01-12
Сообщения: 405
Репутация: +  18  -
Профиль   Отправить e-mail  

оператор "is"

DauR не поверишь

>>> a = 10
>>> b = 10
>>> a is b
True
>>> a = 100500
>>> b = 100500
>>> a is b
False



Офлайн

#4 Дек. 22, 2010 23:14:25

vaxXxa
От: Kyiv, Ukraine
Зарегистрирован: 2009-06-16
Сообщения: 278
Репутация: +  0  -
Профиль   Отправить e-mail  

оператор "is"

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



Офлайн

#5 Дек. 23, 2010 04:06:13

Eliont
От:
Зарегистрирован: 2010-05-30
Сообщения: 77
Репутация: +  0  -
Профиль   Отправить e-mail  

оператор "is"

Разница между is и “==”, is not и “!=”

is сравнивает объекты по указателю, точнее, их уникальные идентификаторы, в то время как “==” сравнивает их значения(если они сравнимы) независимо от расположения.

Базовые типы данных кэшируются, так что для таких переменных чаще всего id одинаковы.



Отредактировано (Дек. 23, 2010 04:09:09)

Офлайн

#6 Дек. 23, 2010 06:25:59

DauR
От:
Зарегистрирован: 2010-04-08
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

оператор "is"

sp3 в твоем втором примере у меня True выводить



Офлайн

#7 Дек. 23, 2010 06:32:19

DauR
От:
Зарегистрирован: 2010-04-08
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

оператор "is"

Как я понял для маленьких переменных если они одинаковы python выводить true, если большие то false?



Офлайн

#8 Дек. 23, 2010 06:54:29

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

оператор "is"

Открываем исходники CPython 2.7
Для типа int кешируются числа в диапазоне -5..256 включительно

Только зачем вам эти малосущественные детали?



Офлайн

#9 Дек. 23, 2010 10:46:22

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

оператор "is"

Андрей Светлов
Для типа int кешируются числа в диапазоне -5..256 включительно
Никогда не понимал, почему от -5? Почему не -256 для симметрии? Ну или от нуля, для точности…
Гвидо что, собрал глобальную статистику по частоте использования чисел?



Офлайн

#10 Дек. 23, 2010 10:53:50

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

оператор "is"

ZZZ
Гвидо что, собрал глобальную статистику по частоте использования чисел?
Таки да. Более того, эту статистику можно включить в любой момент.

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



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version