在 x = 1 中,x 和 1 都是对象吗?

In x = 1, are both x and 1 objects?

x = 1中,x1都是对象吗?因为 print(1)x = 1; print(x) 会产生相同的输出。

甚至 print 函数的语法是:

print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)

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 是一个 int 对象。 x 是一个引用对象的变量。

pass-by-reference vs pass-by-value see this answer 更深入。它说:

The variable is not the object.

print() 将输出对象的表示,1x 都指向该对象。

在这种情况下有趣的是,您可以通过简单地创建更多具有相同值但指向不同实例的变量来创建相同对象的多个实例。例如:

x = 1000
y = 1000
z = 1000

这是 3 个不同的对象,它们彼此相等,但仍然是独立的对象。

For numbers from -5 to 255, the python interpreter will cache the object instances 这样该范围内的所有整数只有一个实例。如果上面的例子是 1 而不是 1000,xyz 实际上会指向同一个对象。