Python 可变对象和不可变对象

摘抄:https://www.aliyun.com/jiaocheng/444551.html


万物皆对象!

python中不存在所谓的传值调用,一切传递的都是对象的引用,也可以认为是传址。

可变,就是在内存中的那 块内容(value)是否可以被改变。

如果是不可变的,在对对象本身操作的时候,必须在内存的另外地方再申请一块区域(因为老区域#不可变#),老的区域 就丢弃了(如果还有其他ref,则ref数字减1,类似unix下的hard-link)。

如果是可变的,对对象操作的时候,不需要再在其他地方申请内 存,只需要在此对象后面连续申请(+/-)即可,也就是它的内存地址会保持不变,但区域会变长或者变短。

不可变对象 :  

        指对象内容不可变

        不可变对象有: int、字符串(string)、float、(数值型number)、元组(tuple)

        特点:



        从上图可知,不可变对象的特征没有变,变的只是创建了新对象,改变了变量的对象引用。

       优点: 这样可以减少重复的值对内存空间的占用

        缺点:要修改变量绑定的值,如果内存中没用存在该值的内存块,那么必须重新开辟一块内存,把新地址与变量名绑定。而不是修改变量原来指向的内存块的值,这回给执行效率带来一定的降低


可变对象:

        指对象的内容可变

           可变对象有: 字典型(dictionary)、列表型(list)

            特点:

       

重点 & 知识点:

函数参数: 

Python函数参数对于可变对象,函数内对参数的改变会影响到原始对象;对于不可变对象,函数内对参数的改变不会影响到原始参数。




猜你喜欢

转载自blog.csdn.net/shihongji/article/details/80285453