python函数式传参

 

a =1

def fun(a):

  a = 2

fun(a)

print a #1

a = []

def fun(a):

  a.append(1)

fun(a)

print(a)  #1

  在此例中为什么调用a为数字的时候,用函数对a进行操作,a的值不变,a为列表的时候调用函数对传入参数进行操作,发现函数的值发生变化。这是因为在python中变量都可以理解为内存中对象的引用,对象分为“可变对象”和“不可变对象”。strings,tuples,numbers是不可更改对象,而list,dict则是可更改对象。当对象的引用传递给参数的时候,函数自动复制一份引用,函数中的这份引用和外面 的变量引用之间没有任何关系。

  第一个例子里函数把引用指向了一个不可变对象,当函数返回的时候,外面的引用 不发生变化,第二个例子中,函数的引用指向的是可变对象,这种情况下就像定义了一个指针,返回后更改了内存的属性。

posted @ 2018-09-11 09:04  HAPPYEVERYD  阅读(207)  评论(0)    收藏  举报