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
由此可证明传递的是引用的复制值