测试Python中变量传递的到底是引用还是值?

先说结论:Python中统一都是引用传递。

理解变量和对象

  • 我们都知道,Python中一切事物皆是对象,变量是对对象在内存中的存储的地址的抽象。所有的变量都可以理解是内存中一个对象的引用。

  • 画图理解如下:

  • Python的引用传递

  • 上面我们理解了变量和对象。Python对象可以分为可变对象(list, dic, set等)和不可变对象(tuple, string, number)两种。
  • 当传递的参数是可变对象的引用时,由于 可变对象的值可以修改,因此可以通过修改参数值而修改原对象 ,这类似于C语言中的引用传递;
  • 当传递的参数是不可变对象的引用时,虽然传递的是引用,参数变量和原变量都指向同一内存地址,但是 不可变对象无法修改,所以参数的重新赋值不会影响原对象 ,这类似于C语言中的值传递。