一、可变对象和不可对象
Python在heap中分配的对象分成两类:可变对象和不可对象。所谓可变对象是指,对象的内容可变,而不可变对象是指内容不可变。
不可变对象:int、string、float、tuple
可变对象:list、dictionary
1.不可变对象
由于python中的变量存放的对象引用,所以对于不可变对象而言,尽管对象本身不可变,但变量的对象引用是可变的。
不可变对象的优缺点:优点是这样可以减少重复值对于内存空间的占用;缺点是要修改变量的绑定值,如果内存中不存在该值的内存块,必须重新开辟一块内存,把新地址与变量名绑定。而不是修改原来变量指向的内存块的值,这会降低执行的效率。
2.可变对象
其对象的内容是可以变化的。当对象的内容发生变化时,变量的对象引用是不会变化的。
二、函数参数
python函数参数对于可变对象,函数内对参数的改变会影响的原始对象;对于不可变对象,函数内对参数的改变不会影响到原始参数。原因在于:
1.可变对象,参数改变的是可变对象,其内容可以被修改。
2.不可变对象,改变的是函数内变量的指向对象。