var =1314 为什么不会改变传来的形参`var`的值?

var = 1314 为什么不会改变传来的形参 var 的值?

def fun(var):  
    var = 1314  
    print(var, end='')
  
var = 520  
fun(var)  
print(var) 

输出结果为:

1314 
520
阅读 4.9k
7 个回答

对于 fun(var):传入实参 520,但是局部变量和fun的形参重名,fun内的var重新指向局部变量1314,运行完,打印1314,内存释放。
而下面的print(var),这个var为global.var,一直指向的就是520

因为数值是不可变对象。你改变了绑定关系,或者引用。你没改变对象本身。

值传递就相当于将传递的参数拷贝了一份,而引用类型则是将指针拷贝了一份。理解一般类型和引用类型区别后,理解这个一般没问题。

函数的传参有两种传递方式,按值传递和按引用传递。对于基础数据类型(字符串、数字、布尔值等),会使用按值传递的方式,也就是把值直接复制一遍传递进去,在内部修改参数的值,对外部没有影响;而对于复杂数据类型(对象,数组等),会使用按引用传递的方式,也就是只把对象(以对象为例)的引用传递进去,在函数内部修改对象的属性,则外部对象的属性也会随着改变。

Python 不是 call by value 也不是 call by reference!
Python 是完完全全的 call by sharing!

剛好我在另外一個問題有詳細討論傳參, 有興趣的人可以試著閱讀和思考看看:

https://segmentfault.com/q/10...


我回答過的問題: Python-QA

图片描述

这涉及到作用域的问题。自己体会一下吧。

推荐问题
宣传栏