def func(x):
print "inside function" ,id(x)
x = 2
x = 50
print "outside function" ,id(x)
print 'Value of x before function call is', x
func(x)
print 'Value of x after function call is', x
输出:
outside function 6486996
Value of x before function call is 50
inside function 6486996
Value of x after function call is 50
假设id()
给出了对象的内存位置。即使两者都保存在同一位置,如果x值在func()
中更改,则不会在外部影响。你知道吗
啊,但是函数中的
id(x)
调用引用了传递给函数的全局x,但是x = 2
创建了一个新的局部x。请尝试以下操作:典型输出
如果你想了解更多,我想你需要完全理解基本的python。你知道吗
关于你的问题:
可变对象作为参数
函数获取对该对象的引用并可以对其进行变异,但如果在方法中重新绑定引用,则外部作用域将一无所知,完成后,外部引用仍将指向原始对象。你知道吗
作为参数的不可变对象
仍然不能重新绑定外部引用,甚至不能改变这个对象。你知道吗
更新注释:所以u传递x(整数不可变)到函数调用,你不能改变这个对象。如果你在函数中重新绑定x引用,外部作用域什么都不知道,完成后,外部引用仍然指向原来的整数50对象。你知道吗
赋值通常会更改名称和对象之间的绑定(当然,如果您不执行
x = x
之类的操作)。它不会对对象做任何更改(反正对int
不起作用,因为它们是不可变的,只是作为旁注)因此在本例中,函数中的
x
指向50
对象,直到您更改它为止。然后它指向另一个对象。对象本身不受影响。你知道吗要一步一步地指出发生了什么:
x
指向值为50的int对象x
指向同一对象x
更改为指向不同的对象,值为2x
仍然指向50。你知道吗相关问题 更多 >
编程相关推荐