Python函数传参只传值,不传递引用

Python函数只存在值传递,不存在引用传递

def test(dw):
    dw['a'], dw['b'] = dw['b'], dw['a']
    # dw = None
    print("test函数中:%s" % dw)


dw = {'a': 1, 'b': 2}
test(dw)
print("主函数中:%s" % dw)

执行上面代码输出:

test函数中:{'a': 2, 'b': 1}
主函数中:{'a': 2, 'b': 1}

可以看到test函数内输出的是交换后的值,主函数中输出的也是交换后的值,此时容易让人误解为这就是java中的引用传参,但其实不对,这个还是传值,相当于dw这个原本的引用被复制了一个新的引用传递了进去,可以去掉上面代码中的注释行进行测试:

def test(dw):
    dw['a'], dw['b'] = dw['b'], dw['a']
    dw = None # 这行将引用指向空
    print("test函数中:%s" % dw)


dw = {'a': 1, 'b': 2}
test(dw)
print("主函数中:%s" % dw)

结果:

test函数中:None
主函数中:{'a': 2, 'b': 1}

如果是传递的同一个引用,则当test函数将引用指向空的时候,主函数的也应该为None

由此可证明传递的是引用的复制值

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值