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