Почему разный результат выполнения в 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, а при выполнении программы независимо от среды.
Комментариев нет:
Отправить комментарий