Python在heap中分配的对象分成两类:可变对象和不可变对象。所谓可变对象是指,对象的内容是可变的,例如list。而不可变的对象则相反,表示其内容不可变。
- 不可变对象:int,string,float,tuple
- 可变对象 :list,dictionary
一、不可变对象
由于Python中的变量存放的是对象引用,所以对于不可变对象而言,尽管对象本身不可变,但变量的对象引用是可变的。
从上面得知,不可变的对象的特征没有变,依然是不可变对象,变的只是创建了新对象,改变了变量的对象引用。
输出:
二、可变对象
其对象的内容是可以变化的。当对象的内容发生变化时,变量的对象引用是不会变化的。如下面的例子:
三、函数参数
Python函数参数对于可变参数,函数内对参数的改变会影响到原始对象,对不可变参数,函数内对参数的改变不会影响到原始参数
输出结果:
总结:
函数通过引用调用,只有可变对象函数内对参数的改变会影响到原始的对象,对于不可变对象来说,函数内对
参数的改变,不会影响到原始的对象,具体原因:
1、可变对象,参数图,改变的是可变对象
2、不可变对象,改变的是函数内变量的指向对象