可变类型 Vs 不可变类型(这里的可变不可变,是指内存中的那块内容(value)是否可以被改变。)
- 可变类型(mutable):列表,字典
- 不可变类型(unmutable):数字,字符串,元组
- 如果是不可变类型,在对对象本身操作的时候,必须在内存中新申请一块区域(因为老区域#不可变#)。不允许变量的值发生变化,如果改变了变量的值,相当于新建了一个对象,而对于相同的值的对象,在内存中则只有一个对象,内部会有一个引用计数来记录有多少个变量来引用这个对象,当引用计算变为0的时候,就启用垃圾回收机制,原来的地址就不再存在。
- 如果是可变类型,对对象操作的时候,不需要再在其他地方申请内存,即地址不会发生变化,值可以变化。对于相同的值不同的对象,在内存中则会存在不同的对象,即每个对象都有自己的地址,相当于内存中对于同值的对象保存了多少份,这里不存在引用计数,是实实在在的对象。
- 可以使用内建函数id()来确认对象的身份在两次赋值前后是否发生了变化。