python里是没有像C和C++里那样按值传参的说法的。python中的所有东西都是对象,这也是它的强大之处,它没有基本类型之说。
在python中,类型属于对象,变量是没有类型的,这正是python的语言特性,也是吸引着很多python开发人员的一点。所有的变量都可以理解是内存中一个对象的“引用”,或者,也可以看似c中void*的感觉。所以,希望大家在看到一个python变量的时候,把变量和真正的内存对象分开。
Python中没有变量,只有对象和名字。Everything is object,这是python这种面向对象语言所倡导的理念。在C++中,79只是一个整型数,但在python中,79却是一个实实在在的对象,您可以用dir(79)来显示它的属性。名字是对一个对象的称呼,一个对象可以只有一个名字(如:i = 79),也可以没有名字或取多个名字。但对象自己却不知道有多少名字,叫什么,只有名字本身知道它所指向的是个什么对象。
在Python中当你向一个函数传递参数(对象)时,实际上是给对象命名了一个新名字。与其它编程语言相比Python中并没有传值和传引用这类东西,如果真想比较一下的话那它更类似于传引用,因为对象并没有被拷贝到内存而是得到一个新名字。说类似是因为这并不严格,因为在其它语言中(c++)你可以通过引用传递参数,并改变这些值。但在Python中只有传递的对象是可变的类型(比如:列表、字典等)你才能改变它。如果传递的对象是字符串、整型这类,你在函数中并不能改变它。
我们做一个罪简单的例子:
i=1
i=i+2
其中,i是对象1的名字,我们给i自加2的时候,对象1的属性和类型都没有发生变化,发生变化的只有对象的名。