我知道在python中数值是不可变的。我还读过python中的每件事是如何成为一个对象的。我只想知道数字类型是否也是python中的对象。因为如果它们是对象,那么变量实际上就是引用变量,对吗?这是否意味着,如果我将一个数字传递给一个函数并在函数内修改它,那么将创建两个带有两个引用的number对象?python中是否有原始数据类型的概念?在
注意:我也认为它是物体。但是在python中可视化tutor说的不同: http://www.pythontutor.com/visualize.html#mode=edit
def test(a):
a+=10
b=100
test(b)
还是可视化工具的缺陷?在
Python中所有的都是一个对象,它包括数字。没有“原始”类型,只有内置类型。在
然而,数字是不变的。当您对一个数字执行操作时,您正在创建一个新的数字对象。在
是数值类型对象吗?在
显然是的。:-). 在
注意,你可能需要稍微调整一下你的心理模型。在我看来,你认为
^{pr2}$object
是“可变”的,事实并非如此。实际上,我们需要将python名称视为对对象的引用。该对象可能包含对其他对象的引用。在在这里,计算右手边的所有名称都被解析为对象,表达式(对象)的结果由“name”引用。在
好的,现在让我们考虑一下当你把某个东西传递给一个函数时会发生什么。在
我们希望在这里发生什么?首先,我们创建函数
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?相关问题 更多 >
编程相关推荐