0
0 комментариев

Детализирую вопрос.
В книгах по Python пишут, что все в Python есть объект.

Берем традиционный подход к изучению/обучению языкам программирования.
Языки Pascal, C, C++, у них есть понятие «имя переменной» (идентификатор). С именем переменной связывается/присваивается значение. Значение хранится в памяти. Имя переменной — это способ (в исходном тексте программы) обратиться к ячейке памяти для получения значения, которое там хранится.

Не знаю верно ли высказывание (для компилируемых языков): Для переменных, например, целого типа, в момент выполнения программы на компьютере, процессор работает уже с адресами ячеек памяти, где хранятся значения переменных. Т.е. не такого, что где-то по какому-то адресу хранится имя переменной и оно связывается с адресом ячейки, в которой хранится значение.

Теперь переходим к Python. В этом языке все является объектом, даже определение функции.
Переменная объект, значение объект и т.д. В разное время с одним и тем же объектом может соотноситься разный другой объект.

a = 1
print(a)
a = "Hello"
print(a)

Но тогда как понять действие функции id()? По определению стандарта
она возвращает «identify» указанного объекта. Причем, «возвращает целое, гарантированно являющееся уникальным» и постоянным для объекта на время его существования.»

Тогда почему

a = 1
b = 1
print(id(a) == id(b) == id(1))  # True
print("Why?")

ведь a, b, 1 разные объекты?
По-моему вопрос получился…

Используется Python 3.6


Про значения от -5 до 256 наслышан. Имеет место быть

a = 1000000
b = 1000000
print(id(a) == id(b))  # True
print("Why?")

На счет того, что достаточно «знать об именах и т.д.». Для меня не достаточно, потому и спрашиваю у уважаемых профи. В Питоне все объект. Нет имен переменных. Отсюда и мой вопрос.


Добавить комментарий