|
|

楼主 |
发表于 2018-5-5 20:28:00
|
显示全部楼层
Python参数传递采用的是“传对象引用”的方式。这种方式相当于传值和传引用的一种综合。如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值--相当于通过“传引用”来传递对象。如果函数收到的是一个不可变对象(比如数字、字符或者元组)的引用,就不能直接修改原始对象--相当于通过“传值'来传递对象。
- a=2
- print('*',id(a)) # * 4546557968
- def f1(x):
- print('f1_x1',id(x)) # f1_x1 4546557968
- x=x+1
- print('f1_x2',id(x)) # f1_x2 4546558000
- f1(a)
- print('after',a) # after 2
复制代码
注意这时a的值没有变,id(a)指的是a在内存中的地址
- b=[1,2,3]
- print('*',id(b)) # * 103692059976
- def f2(x):
- print('f2_x1',id(x),x) # f2_x1 103692059976 [1, 2, 3]
- x[1]=100
- print('f2_x2',id(x),x) # f2_x2 103692059976 [1, 100, 3]
- f2(b)
- print('after',b) # after [1, 100, 3]
复制代码
注意这时b的值变了
- x=2
- y=8
- def swap(a,b):
- a,b=b,a
- return a,b
- x,y=swap(x,y) #x=8,y=2
复制代码
这样做可以把x,y的值换掉 |
|