问题:在Python文档中好像没有明确指出一个函数参数传递的是值传递还是引用传递。如下面的代码中“原始值”是不放生变化的:

class PassByReference:
def __init__(self):
self.variable = 'Original'
self.Change(self.variable)
print self.variable

def Change(self, var):
var = 'Changed'

那么该怎样通过引用传递传递一个值呢?
原地址:http://stackoverflow.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]

第一个例子里的函数把引用指向了一个不可变对象,当函数返回的时候,外面的引用不会有任何改变。而第二个例子就不一样了,函数内的引用只想的是可变对象,对他的操作就和定位了指针地址一样,在内存里对改地址的对象进行了修改。

更多相关文章

  1. python题目——认识*与**,判断函数输出
  2. Tensorflow部分函数功能
  3. 在save方法中创建两个对象
  4. 独立于数据库的MAX()函数在SQLAlchemy中
  5. 'str'对象不能解释为groupby上的整数
  6. Python 面相对象 —— 类的三大成员
  7. Python_面向对象_单例模式
  8. 【Python】 编码,en/decode函数以及print语句的一些探索
  9. Python——函数 8、可变长参数

随机推荐

  1. c语言中undeclared identifier是什么意思
  2. C++如何给二维数组初始化
  3. 什么是Go语言?Go语言的优缺点介绍
  4. 一个c程序的执行是从哪里开始到哪里结束
  5. devc++怎么改成中文
  6. 在c语言中引用数组元素时,其数组下标的数
  7. c++中=和==的区别有哪些?
  8. 在c程序中,注释语句只能位于一条语句的后
  9. c++中不能重载的运算符有哪些
  10. c语言语句以什么结束