先说结论:Python中统一都是引用传递。
理解变量和对象
我们都知道,Python中一切事物皆是对象,变量是对对象在内存中的存储的地址的抽象。所有的变量都可以理解是内存中一个对象的引用。
画图理解如下:
Python的引用传递
上面我们理解了变量和对象。Python对象可以分为可变对象(list, dic, set等)和不可变对象(tuple, string, number)两种。 当传递的参数是可变对象的引用时,由于 可变对象的值可以修改,因此可以通过修改参数值而修改原对象 ,这类似于C语言中的引用传递; 当传递的参数是不可变对象的引用时,虽然传递的是引用,参数变量和原变量都指向同一内存地址,但是 不可变对象无法修改,所以参数的重新赋值不会影响原对象 ,这类似于C语言中的值传递。