@BladeHeroku

Почему разные значения в операторе is в Python?

У меня возник вопрос насчет оператора is в python. Почему ссылки на адрес значения в переменных a и b разные именно в консоли, в то время как в файле скрипта все работает отлично?

В Файле:
a = 1234
b = 1234

print(a is b)

Вывод: True

В Консоли:
>>> a = 1234
>>> b = 1234
>>> 
>>> a is b
False
>>>
  • Вопрос задан
  • 139 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Предполагаю, что CPython при компиляции скрипта сохраняет литерал 1234 в соответствующую область памяти, а потом в переменные a и b записывает на него ссылку. В консоли же у него нет единицы компиляции, из которой можно выделить общие литералы.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
fox_12
@fox_12 Куратор тега Python
Расставляю биты, управляю заряженными частицами
Легко проверить же:
Скрипт выдает такое:
a = 1234
b = 1234

print(id(a))
print(id(b))
print(a is b)


# 2221342169168
# 2221342169168
# True

Как видим - a и b ссылаются на тот же адрес памяти - python соптимизировал использование переменными памяти, поскольку в скрипте во время выполнения переменные не меняются.

В то же время в консоли создаются переменные в разных областях памяти:
>>> a = 1234
>>> id(a)
2715578112304
>>> b = 1234
>>> id(b)
2715578112432
>>>
>>> a is b
False

поскольку значение переменных больше 256 и заранее неизвестно как вы с переменными поступите дальше
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы