В x = 1 являются ли объекты x и 1? - PullRequest
4 голосов
/ 17 июня 2020

В x = 1 оба объекта - x и 1? Потому что print(1) и x = 1; print(x) приведут к одному и тому же результату.

Даже синтаксис функции print следующий:

print (* объекты, sep = '', end = '\ n', file = sys.stdout, flush = False)

Ответы [ 2 ]

4 голосов
/ 17 июня 2020

Имена в Python не являются объектами. Использование имени в выражении автоматически оценивает объект , на который ссылается по имени. Невозможно каким-либо образом взаимодействовать с самим именем, например, передавать его или вызывать для него метод.

>>> x = 1
>>> type(1)    # pass number to function...
<class 'int'>  # ...and receive the number!
>>> type(x)    # pass name to function...
<class 'int'>  # ...but receive the target!

Обратите внимание, что технически 1 также не является объектом, а литерал объекта. Можно передавать только объект - он не показывает, происходит ли он из литерала 1 или, например, математического выражения, такого как 2 - 1.

1 голос
/ 17 июня 2020

1 - это объект int. x - это переменная, имеющая ссылку на объект.

Подробнее о передаче по ссылке и передаче по значению см. Этот ответ . Он говорит:

Переменная не является объектом.

print() выведет представление объекта, на который указывают 1 и x.

В этом случае интересно то, что вы можете создать несколько экземпляров идентичных объектов, просто создав несколько переменных, которые имеют одинаковое значение, но указывают на разные экземпляры. Например:

x = 1000
y = 1000
z = 1000

Это 3 разных объекта, которые равны друг другу, но все же являются отдельными объектами.

Для чисел от -5 до 255 интерпретатор python кэширует экземпляры объекта , так что все целые числа в этом диапазоне имеют только один экземпляр. Если бы в приведенном выше примере было 1 вместо 1000, x, y и z фактически указывали бы на один и тот же объект.

...