可变类型与不可变类型的作用和意义

Python中的变量分为可变类型和不可变类型 两种。

  可变类型: 数字、字符串、元组、可变集合。

  不可变类型: 列表、字典、不可变集合。

  这里的可变不可变,是指内存中的那块内容(value)是否可以被改变

   所谓可变类型与不可变类型是指:数据能够直接进行修改,如果能直接修改那么就是可变,否则是不可变。

 

    根据存储的内容是否可变划分为可变类型与不可变类型。如果是不可变类型,在对对象本身操作的时候,必须在内存中新申请

  一块区域(因为老区域是不可变)。如果是可变类型,对对象操作的时候,不需要再在其他地方申请内存,只需要在此对象后面连

  续申请(+/-)即可,也就是它的address空间地址会保持不变,但区域会变长或者变短。

    通过id(变量名)  来查看变量的空间地址是否发生变化。

 

     python中所声明的变量都以对象的形式存在,存在于机器的固定内存之中。可以理解为变量名为对象的指针。

   在python中设置的垃圾回收机制采用的是引用计数机制来实现,就是通过使用计数器的方式来判断空间的引用情况,当计

   数器为0时则会将内存回收。例如声明变量a=3,则说明a指向存储3的空间,那么此时存储3的空间引用计数加1。如果此时

   定义a=4,那么变量a的指向则指向内存中存储4的空间地址,存储4的空间引用计数加1,而之前存储3的空间引用减1为0,

   则会被作为垃圾回收掉。

不可变类型

  不可变类型有什么好处?如果数据是不可变类型,当我们把数据传给一个不了解的API时,可以确保我们的数据不会被修改。如果我们要操作一个从函数返回的元组,可以通过内建函数list()把它转换成一个列表。

  python在声明不可变类型时会在已经声明的对象中寻找该对象是否已经被声明过,若该对象被声明过则,变量会直接指向该对象不会再申请新的内存空间。

如a=3已经声明这时声明b=3,则a,b指向同一块内存

  不可变类型不能对其内容直接修改,如字符串'hellopython'可以对其进行分割加长的处理(经过如此处理之后python其实是将新的字符串储存到新的内存中),但是不能替换改变其字符串中某个字母的内容。

 

(一) 数字、字符串

  例如:对于不可变类型  数字1,它在内存中的地址是唯一的。所以a=1, b=1都是指向存储1的内存地址。

    如果a=2,那么变量a的指向则发生了变化,指向了存储2的空间地址。

   举例:这里是最好区分可变与不可变类型的数据了。  如 现在是不可变类型 数字a=1,在修改a+1后得到的b,此时就会创建一个新的内存地址用来保存修改后的对象,所以内存地址不一样。而对于可变类型数据在这一点就不一样。 

 

不可变类型:字符串

 

 不可变类型: 元组

 

可变类型

可变类型:列表

可变类型:字典

 

posted @ 2018-10-05 20:21 itlongfei 阅读(...) 评论(...) 编辑 收藏