参数(自变量)在Python里都是按引用传递,也就是传递的是变量地址,(变量就是地址,没有类型,而关联的对象是有类型的)
但是对于不可变变量,在函数内修改会申请新的内存空间,所以对外层函数没有影响,
对于list变量,相当于操作同一块内存,则会影响外层函数。
- 可变对象:list dict set
- 不可变对象:tuple string int float bool
- #!/usr/bin/python
- # 可写函数说明
- def changeme( mylist ):
- "修改传入的列表"
- mylist.append([1,2,3,4]);
- print "函数内取值: ", mylist
- return
- # 调用changeme函数
- mylist = [10,20,30];
- changeme( mylist );
- print "函数外取值: ", mylist
传入函数的和在末尾添加新内容的对象用的是同一个引用。故输出结果如下:
- 函数内取值: [10, 20, 30, [1, 2, 3, 4]]
- 函数外取值: [10, 20, 30, [1, 2, 3, 4]]
好,看到这里,自己亲手测试一下,代码:
- def printme(age,str):
- str = 'str changed!'
- age=25
- print age,str
- return
- str = 'ori str'
- age = 23
- printme(age,str)
- print age,str
输出结果:
- 25 str changed!
- 23 ori str