Найти - Пользователи
Полная версия: оператор "is"
Начало » Python для новичков » оператор "is"
1 2
DauR
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? Ведь в обоих случаях они указывают на идентичные элементы…
o7412369815963
DauR
1.
a = 10
b = 10
print(a is b) # True
потому что они ссылаются на один и тот же объект
>>> a = 10
>>> b = 10
>>> id(a) == id(b)
True
sp3
DauR не поверишь
>>> a = 10
>>> b = 10
>>> a is b
True
>>> a = 100500
>>> b = 100500
>>> a is b
False
vaxXxa
Пайтон очень маленькие значения не клонирует и таким образом хоть две переменные и неизменяемые, они ссылаются на один объект.
Eliont
Разница между is и “==”, is not и “!=”

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

Базовые типы данных кэшируются, так что для таких переменных чаще всего id одинаковы.
DauR
sp3 в твоем втором примере у меня True выводить
DauR
Как я понял для маленьких переменных если они одинаковы python выводить true, если большие то false?
Андрей Светлов
Открываем исходники CPython 2.7
Для типа int кешируются числа в диапазоне -5..256 включительно

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

Небольшие отрицательные числа регулярно используются в качестве индексов.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB