|  | 
 
 
 楼主|
发表于 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的值换掉
 | 
 |