【Python】可变对象和不可变对象

Python在heap中分配的对象分成两类:可变对象和不可变对象。所谓可变对象是指,对象的内容是可变的,例如list。而不可变的对象则相反,表示其内容不可变。

  • 不可变对象:int,string,float,tuple
  • 可变对象   :list,dictionary

一、不可变对象

由于Python中的变量存放的是对象引用,所以对于不可变对象而言,尽管对象本身不可变,但变量的对象引用是可变的。

【Python】可变对象和不可变对象

【Python】可变对象和不可变对象

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

【Python】可变对象和不可变对象

输出:

       【Python】可变对象和不可变对象

二、可变对象

其对象的内容是可以变化的。当对象的内容发生变化时,变量的对象引用是不会变化的。如下面的例子:

【Python】可变对象和不可变对象

【Python】可变对象和不可变对象

三、函数参数

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

【Python】可变对象和不可变对象

   输出结果:

【Python】可变对象和不可变对象

总结:

      函数通过引用调用,只有可变对象函数内对参数的改变会影响到原始的对象,对于不可变对象来说,函数内对

参数的改变,不会影响到原始的对象,具体原因:

      1、可变对象,参数图,改变的是可变对象

【Python】可变对象和不可变对象

    

       2、不可变对象,改变的是函数内变量的指向对象

  【Python】可变对象和不可变对象

 

【Python】可变对象和不可变对象,布布扣,bubuko.com

【Python】可变对象和不可变对象

上一篇:c++ const常量的实现机制(转载)


下一篇:Jython中使用XSSHExcel报异常--java.lang.NoClassDefFoundError: org/apache/xmlbeans/XmlException