Python中的变量分为可变类型和不可变类型 两种。python
可变类型: 数字、字符串、元组、可变集合。函数
不可变类型: 列表、字典、不可变集合。spa
这里的可变不可变,是指内存中的那块内容(value)是否能够被改变3d
所谓可变类型与不可变类型是指:数据可以直接进行修改,若是能直接修改那么就是可变,不然是不可变。指针
根据存储的内容是否可变划分为可变类型与不可变类型。若是是不可变类型,在对对象自己操做的时候,必须在内存中新申请对象
一块区域(由于老区域是不可变)。若是是可变类型,对对象操做的时候,不须要再在其余地方申请内存,只须要在此对象后面连blog
续申请(+/-)便可,也就是它的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,此时就会建立一个新的内存地址用来保存修改后的对象,因此内存地址不同。而对于可变类型数据在这一点就不同。
不可变类型:字符串
不可变类型: 元组
可变类型
可变类型:列表
可变类型:字典