您的位置:首页 > 编程语言 > Python开发

python引用在函数传参时的体现以及可变与不可变对象的对比

2015-05-07 18:40 696 查看
今天偶然看到 vamei 老师的博客 http://www.cnblogs.com/vamei/archive/2012/07/10/2582795.html 讲的是python动态类型以及引用的事儿。才发现python的一个基础也是核心知识没有注意到。

当给函数传递的参数是不可变类型时,形参和实参本身的改变是互不影响的。

当给函数传递的参数是可变类型时,形参和实参本省的改变是相互影响的。

#函数参数是不可变类型
def f(x):
x += 1
print x

x=1
print x
f(x)
print x

执行结果:



#函数参数是可变类型
def f(x):
x[0] += 1
print x

x=[1,2,3]
print x
f(x)
print x

执行结果:



可以看出,当参数是可变参数时,函数内部改变这个参数,函数外部会受到影响!

最后:虽然此时发现x内部的元素变了,但其实如果使用id查看该变量的内存位置,其实依旧没有变化。

这也即是可变与不可变对象的最大区别。

不可变对象:变量本身不可变,如果对其做修改,只会默认给你返回一个全新的变量,内存地址和值都是新的。

可变对象 :变量本身可变,如果对其做修改,会在其自身状态上直接做变化,也就是内存地址不变,而值变化了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐