我知道数值在python中是不可变的。我还读过python中的所有东西都是对象。我只是想知道数字类型是否也是python中的对象。因为如果它们是对象,那么变量实际上是引用变量对吧?这是否意味着如果我将一个数字传递给一个函数并在函数内修改它,那么会创建两个带有两个引用的数字对象? python中是否存在原始数据类型的概念?
注意:我也把它当作对象。但是在python导师中可视化说不同:qazxsw poi
http://www.pythontutor.com/visualize.html#mode=edit
或者它是可视化工具中的缺陷?
数字类型是对象吗?
def test(a):
a+=10
b=100
test(b)
显然他们是。 :-)。
请注意,您可能需要稍微调整一下>>> isinstance(1, object)
True
的心理模型。在我看来,你认为object
是“可变的” - 事实并非如此。实际上,我们需要将python名称视为对象的引用。该对象可能包含对其他对象的引用。
object
这里,评估右侧 - 所有名称都被分解为对象,表达式(对象)的结果由“name”引用。
好的,现在让我们考虑一下将某些内容传递给函数时会发生什么。
name = something
我们期待在这里发生什么?好吧,首先我们创建函数def foo(x):
x = 2
z = 3
foo(z)
print(z)
。接下来,我们创建对象foo
并通过名称3
引用它。之后,我们查找z
引用的值并将该值传递给z
。输入foo
后,该值将由(本地)名称foo
引用。然后我们创建对象2并通过本地名称x
引用它。请注意,x
与全球x
无关 - 它们是独立的参考。仅仅因为它们在您输入函数时引用相同的对象并不意味着它们必须始终引用该函数。我们可以通过使用赋值语句来更改名称在任何时候引用的内容。
请注意,使用+ =的示例可能会使事情变得复杂,但如果它在这种情况下有帮助,您可以将z
视为a += 10
。有关+ =结帐的更多信息:a = a + 10
Python中的所有内容都是一个对象,其中包括数字。没有“原始”类型,只有内置类型。
然而,数字是不可改变的。使用数字执行操作时,您将创建一个新的数字对象。