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

Python函数参数到底是按值还是按引用

2017-07-29 11:01 417 查看
本文是Python入门到函数遇到的疑惑。
下面一段是基础教程的原文Python函数


按值传递参数和按引用传递参数

所有参数(自变量)在python里都是按引用传递。如果你在函数里修改了参数,那么在调用这个函数的函数里,原始的参数也被改变了。例如:

[python] view
plain copy

#!/usr/bin/python  

   

# 可写函数说明  

def changeme( mylist ):  

   "修改传入的列表"  

   mylist.append([1,2,3,4]);  

   print "函数内取值: ", mylist  

   return  

   

# 调用changeme函数  

mylist = [10,20,30];  

changeme( mylist );  

print "函数外取值: ", mylist  

传入函数的和在末尾添加新内容的对象用的是同一个引用。故输出结果如下:

[python] view
plain copy

函数内取值:  [10, 20, 30, [1, 2, 3, 4]]  

函数外取值:  [10, 20, 30, [1, 2, 3, 4]]  

好,看到这里,自己亲手测试一下,代码:

[python] view
plain copy

def printme(age,str):  

    str = 'str changed!'  

    print age,str  

    return  

  

str = 'ori str'  

age = 23  

printme(age,str)  

print str  

输出结果:

[python] view
plain copy

23 str changed!  

ori str  

好像哪里不对啊!不是说函数内部修改了参数的值,那么实际参数也会变吗?!难道它对字符串和列表等还不是同等对待?
有经验的人都知道,在python中,strings, tuples, 和numbers是不可更改的对象,而list,dict等则是可以修改的对象
那么,就记住红色文字的这句话吧,你想修改不可更改的对象时,其实就开辟了一个新的存储空间新的对象,这就是为什么还有个全局作用域和局部作用域的问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: