python 中的数字是否被视为对象?

Are numbers considered objects in python?

我知道 python 中的数值是不可变的。我还读过 python 中的一切都是对象。我只想知道数字类型是否也是 python 中的对象。因为如果它们是对象,那么变量实际上是引用变量,对吗?这是否意味着如果我将一个数字传递给一个函数并在函数内部修改它,那么会创建两个具有两个引用的数字对象? python有原始数据类型的概念吗?

注:我也把它当成对象了。但可视化 python 导师说不同: http://www.pythontutor.com/visualize.html#mode=edit

def test(a):
    a+=10
b=100
test(b)

还是可视化工具的缺陷?

Python 中的所有内容 都是一个对象,其中包括数字。没有 "primitive" 类型,只有内置类型。

然而,数字是不可变的。当您对数字执行操作时,您正在创建一个新的数字对象。

数值类型是对象吗?

>>> isinstance(1, object)
True

显然是的。 :-).

请注意,您可能 需要稍微调整一下 object 的心理模型。在我看来,您认为 object 是 "mutable" 的东西——事实并非如此。实际上,我们需要将 python 名称视为对对象的引用。该对象可能包含对其他对象的引用。

name = something

此处,计算右侧——所有名称都解析为对象,表达式的结果(对象)由 "name" 引用。

好的,现在让我们考虑将某些内容传递给函数时会发生什么。

def foo(x):
   x = 2

z = 3
foo(z)
print(z)

我们期望这里发生什么?好吧,首先我们创建函数 foo。接下来,我们创建对象 3 并通过名称 z 引用它。之后,我们查找 z 引用的值并将该值传递给 foo。输入 foo 后,该值将被(本地)名称 x 引用。然后我们创建对象 2 并通过本地名称 x 引用它。请注意,x 与全局 z 无关——它们是独立的引用。仅仅因为当您输入函数时它们引用了同一个对象并不意味着它们必须一直引用该函数。我们可以使用赋值语句随时更改名称引用的内容。

请注意,您使用 += 的示例似乎会使事情复杂化,但如果在这种情况下有帮助,您可以将 a += 10 视为 a = a + 10。有关 += 的更多信息,请查看:When is "i += x" different from "i = i + x" in Python?