05
Май
2017

Что такое объект в Python. Почему id(a) == id(b) == id(1)?

Детализирую вопрос.
В книгах по 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?")

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

Источник: https://ru.stackoverflow.com/questions/662398/%D0%A7%D1%82%D0%BE-%D1%82%D0%B0%D0%BA%D0%BE%D0%B5-%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82-%D0%B2-python-%D0%9F%D0%BE%D1%87%D0%B5%D0%BC%D1%83-ida-idb-id1

Share

Тебе может это понравится...