c++函数传参有三种方式:分别是按值、按引用和按指针传递。简单的说按值传递的方式不会改变传递的参数本身,按引用传递的方式会改变参数本身(当然可以用const限制),按指针传递方式会改变指针指向的对象。那么python有没有这样的特性呢?以下做一些测试:
1.传递数字类型的变量(python里可能应该叫对象):
![5a4eb268f4cafef008b0160b7d511b8e.png](https://i-blog.csdnimg.cn/blog_migrate/d7edff0a29c2821bea472d859d902215.jpeg)
从测试代码中可以看到a并没有发生改变,函数中的parm(形参)值发生了改变。也就是说调用函数时参数a只是把值赋给了parm。
2.传递列表类型的变量:
![f2e67f652635fa0939a19451190d3baf.png](https://i-blog.csdnimg.cn/blog_migrate/d8c1d2ad049adae0785966a1335abcfc.jpeg)
从测试代码中可以看出经过函数调用后,a的值发生了改变。改变后的a和函数里的parm是一样的。可以理解为变量a把自己赋给了parm。
3.传递字符串类型的变量:
![8ad82a3894edc4242437b9e38d3a2795.png](https://i-blog.csdnimg.cn/blog_migrate/77fd784088c74051f29eff172c6b8f75.jpeg)
和数字类型一样,传递字符串类型的参数也是按值传递。
4.传递字典类型的变量:
![7325bb12ce745829837fe06b599ab42b.png](https://i-blog.csdnimg.cn/blog_migrate/3b114dc054e1bdc2d2c9813d3612a4dc.jpeg)
和列表类型一样,传递字典类型的参数是按引用方式传递。
5.传递元组类型的变量:
![3cb18c5111dbe63a53bbd0600cd35ec8.png](https://i-blog.csdnimg.cn/blog_migrate/f0a970154aa8a5592dd0358914312421.jpeg)
在函数中试图改变传进来的元组的值,程序崩溃了。
![b6bddb713b4aa0317dde438bb96855b3.png](https://i-blog.csdnimg.cn/blog_migrate/c5c92ee9da72a233708291788997d911.jpeg)
忘了元组是不能改变它的值的....
总结:python中变量可以分为可变类型(如列表、字典)和不可变类型(如数字和字符串)。可变类型的变量可以看成是按引用传递,不可变类型的变量可以看成是按值传递。