关于Python函数参数传递方式--值传递?引用传递!

时间:2021-12-03 21:28:05

渣渣我在学习中遇到的一点问题,特地贴出来,由于我水平渣,所以如有问题,请多指教

经过测试可以发现: python3 不允许我们选择参数传递方式,但是他已经全部采用了引用传递。

有几点需要注意:


1.引用传递可以当做值传递使用,只是你需要把他赋值给一个临时变量副本,不要直接使用引用传递过来的参数。
例如:使用x的副本y.(这里其实相当于我们替代系统进行了值传递操作)
def test(x):
y = x
print y+1

2.引用传递过来的对象其属性不变。引用传递过来的对象其属性不变。引用传递过来的对象其属性不变。

这也就是说,他原来可以更改,那么传递后也可以更改,同理,原先不可改现在也不可改。(这解释了其他巨巨关于不可变对象所说的“值传递”)


3.引用传递有一特点,就是你的变量在函数中地址可能被你改变!
有时你会发现怎么貌似引用传递失效,其实主要原因是因为你的一些操作导致该变量在函数中地址发生了改变,而函数外仍使用旧地址。
例如:
def testplace0(dt):
print id(dt)
dt["A"] = 1
#dt[0].append(dt)
print "不重置dt",id(dt)



def testplace1(dt):
print id(dt)
dt={}
dt["A"] = 1
#dt[0].append(111)
print "重置dt",id(dt)
#dt =([1,5,3],1,3)
dt={}
print id(dt)
testplace0(dt)
testplace1(dt)
print "最终",id(dt)

结果:
109911328
109911328
不重置dt 109911328
109911328
重置dt 109886320

最终 109911328


4.一些赋值操作默认可能是地址赋值,所以要注意使用的方式。
例如:
a=[1,2,3,4]
b=a #地址赋值
b=a[:]#内容赋值
的参数。