Я бегу:
Python 2.7.8 (default, Oct 6 2017, 09:25:50)
GCC 4.1.2 20070626 (Red Hat 4.1.2-14) on Linux 2
Согласно документации:
Операторы
is
иis not
проверяют идентификацию объекта:x is y
равноTrue
тогда и только тогда, когдаx
иy
являются одним и тем же объектом.
Чтобы получить идентификацию объекта, мы можем использовать id
функция.
Если мы откроем новый REPL, мы увидим, что 300
и -6
имеют одинаковую идентичность (на CPython, это означает, что оба ссылаются на один и тот же адрес памяти):
>>> id(300)
94766593705400
>>> id(-6)
94766593705400
Обратите внимание, что фактические значения могут отличаться от исполнения к исполнению, но они всегда равны.
Однако выполнение 300 is -6
дает False
:
>>> 300 is -6
False
У меня есть пара вопросов:
- Почему (и как)
300
и-6
имеют один и тот же идентификатор? - Если да, то почему
300 is -6
уступаетFalse
?
IDs
. Попробуйте это, и вы поймете:print(id(300)) or print(id(-6)) or 300 is -6
- person cs95   schedule 20.12.2017Python 3.4.2 (v3.4.2:ab2c023a9432, Oct 6 2014, 22:15:05) [MSC v.1600 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> id(300) 7807344 >>> id(-6) 8757184 >>> id(300) 8757184 >>> id(-6) 8755376
- person DeepSpace   schedule 20.12.2017Python 2.6.6 (r266:84292, Sep 11 2012, 08:34:23) [GCC 4.4.6 20120305 (Red Hat 4.4.6-4)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> id(300) 15912616 >>> id(-6) 15912616 >>> id(300) 15912616
- person DeepSpace   schedule 20.12.2017>>> 6 is 6 True >>> -999 is -999 False
- person DeepSpace   schedule 20.12.2017