Страницы

Поиск по вопросам

вторник, 13 ноября 2018 г.

Почему разный результат выполнения в PyCharm и командной строке

Почему разный результат выполнения в PyCharm и командной строке, см скрин


Ответ

Чтобы ответить на этот вопрос, нужно вначале сказать несколько слов об операторе is
The operator is test for object identity: x is y is true if and only if x and y are the same object.
Перевод:
Оператор is проверяет идентичность объектов: x is y истинно тогда и только тогда, когда x и y являются одним и тем же объектом.
В консоли Python выполним следующее:
>>> a = "many paths" >>> b = "many paths" >>> a is b False >>> hex(id(a)) '0x6327f0' >>> hex(id(b)) '0x632930'
Здесь видно, что переменные a и b расположены в разных областях памяти, т.е. являются разными объектами с идентичным содержимым. Именно поэтому оператор is возвращает False
Теперь выполним следующую программу:
a = "many paths" b = "many paths" print(a is b) print(hex(id(a)), hex(id(b)))
Результат выполнения:
True 0x632840 0x632840
Здесь обе переменные ссылаются на один и тот же адрес, поэтому оператор is возвращает True
Различное поведение связано с различиями работы Python'а в режиме консоли (выполнение команд по мере ввода пользователем) и в режиме выполнения уже написанной программы. В режиме выполнения программы включается оптимизатор памяти, в то время как в режиме консоли он выключен. Поскольку готовая программа Python'ом компилируется в промежуточный байт-код, у него есть возможность проанализировать все использования переменных и оптимизировать их размещение. В режиме консоли дальнейшие действия неизвестны и интерпретатор, скорее всего, просто "перестраховывается", отключая эту оптимизацию.
P.S. Описанное в вопросе поведение возникает не только в PyCharm, а при выполнении программы независимо от среды.

Комментариев нет:

Отправить комментарий