var = 1314
为什么不会改变传来的形参 var
的值?
def fun(var):
var = 1314
print(var, end='')
var = 520
fun(var)
print(var)
输出结果为:
1314
520
var = 1314
为什么不会改变传来的形参 var
的值?
def fun(var):
var = 1314
print(var, end='')
var = 520
fun(var)
print(var)
输出结果为:
1314
520
对于 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
3 回答3.1k 阅读✓ 已解决
2 回答1.9k 阅读✓ 已解决
2 回答1.3k 阅读✓ 已解决
2 回答1.8k 阅读✓ 已解决
4 回答1.9k 阅读
3 回答1.7k 阅读
1 回答1.4k 阅读✓ 已解决
值传递不会改变,引用传递会改变
https://www.cnblogs.com/gavan...