问题:在Python文档中好像没有明确指出一个函数参数传递的是值传递还是引用传递。如下面的代码中“原始值”是不放生变化的:
class PassByReference:
def __init__(self):
self.variable = 'Original'
self.Change(self.variable)
print self.variable
def Change(self, var):
var = 'Changed'
那么该怎样通过引用传递传递一个值呢?
原地址:http://*.com/questions/986006/how-do-i-pass-a-variable-by-reference
在Python中,所有的变量都可以理解为内存中一个对象的“引用”,或者,也可以看作C语言中void*
的感觉。
需要记住的是类型是属于对象的,而不是变量。变量可以有两种——可更改的(mutable)和不可更改的(immutable)。在Python中,string、tuple、number是不可更改的对象,list、dict等则是可以修改的对象。
当一个引用传递给函数的时候,将会自动复制一份引用,这个函数里的引用和外面的引用是没有关系的。所以像下面这两个例子:
a = 1
def fun(a):
a = 2
fun(a)
print a #结果为1
a = []
def fun(a):
a.append(1)
fun(a)
print a #结果为[1]
第一个例子里的函数把引用指向了一个不可变对象,当函数返回的时候,外面的引用不会有任何改变。而第二个例子就不一样了,函数内的引用只想的是可变对象,对他的操作就和定位了指针地址一样,在内存里对改地址的对象进行了修改。