2017-02-11 2 views
0

Может ли кто-нибудь ответить ниже (Выход из IDLE или проверка на оболочку python - python 2.7). Для 1), 2) и 3), 4) я выполняю точно такую ​​же операцию, но получаю разные результаты.сравнение идентичности - сравнение того же объекта возвращает false

1) >>> а = 0

2) >>> а равно 0

Правда

3) >>> а = 0,0

4) >>> а является 0,0

Ложные

5) >>> 0.0 0.0

True

почему 4) является ложным?

+0

Возможный дубликат [? Почему сравнения строк в Python с использованием либо «==» или «это» иногда производят различный результат] (http://stackoverflow.com/questions/1504717/ почему-does-comparing-strings-in-python-using-or-is-иногда-production) –

+1

Поскольку ответы не учитывают его должным образом, позвольте мне заметить, что (IIRC) вы должны ожидать, 5), чтобы тоже ложь - это только оказывается правдой из-за оптимизации в синтаксическом анализаторе. Однако у меня нет ссылки. – Hurkyl

ответ

1

Это происходит потому, что оптимизация в CPython, что для любого целого числа между -5 и 256 возвращает ссылку на уже существующий объект, то есть a является ссылкой на 0, так что они имеют один и тот же id(). Нет такой оптимизации для чисел с плавающей запятой, как 0.0, поэтому при назначении создается новый объект (это означает, что id(a) != id(0.0)).

Ссылка: https://docs.python.org/2/c-api/int.html

1

Оператор python is используется для проверки наличия двух переменных на одном объекте.

Из документации:

Операторы это и не проверить идентичность объекта: х у истинно тогда и только тогда, когда х и у того же объекта.

Для примера.

a = 0.0

если вы b = a, а затем следить за ним с b is a. Он вернет True.

Теперь, если вы делаете a = 0.0 и b = 0.0, а затем попробуйте b is a, он вернет False, так как теперь a и b представляют собой две переменные, указывающие на два разных объекта.

+0

Я просто сделал 'a = 0.0; b = 0.0', а затем 'b -' '' 'True'. –

+0

@StefanPochmann посмотреть. http://imgur.com/a/b2PUK –

+0

Ну, вы не делаете то, что я сказал. Я не сказал, что сделал «a = 0.0», а затем сделал «b = 0.0». Я сказал, что сделал «a = 0.0; b = 0,0'. Попробуй это*. –

Смежные вопросы