python的不可变数据类型和可变数据类型的区别详解
不可变数据类型和可变数据类型的区别
不可变数据类型
- 不可变数据类型immutable:一般为基本数据类型,仅存储一个数值的数据类型,元组例外,如 int、long、float、string、元组,当创建一个变量时,变量内存储了指向值的地址,该地址处的值不会发生改变,当对变量重新赋值时,实际上是变量内的地址发生了改变。
例如创建a = 1
,a内存储的地址指向1,令b = a
,b中存储和a相同的地址。
当重新赋值a = 0
,a内存储的地址发生变化指向0,而b的地址不变所以值依然为1:
可变数据类型
- 可变数据类型mutable:一般为结构数据类型,如 字典、列表、集合,创建一个变量后,变量保存了指向值的地址,允许对该地址处的值进行修改,注意的是修改操作需要用变量自带的方法,重新赋值操作依然为改变地址。
例如创建a = [1,2]
,a内存储的地址指向[1,2],令b = a
,b中存储和a相同的地址。
当对值[1,2]进行修改时,如a[0] = 3
,此时a存储的地址没有发生改变,因此a、b同时变为[3,2]
如果对变量进行重赋值操作,就不是对原有的值进行修改了,而是创建新的对象,变量中存储的地址会发生改变,例如对a=[1,2]中的1修改为3的操作,变为重赋值a = [3,2]
,那么就和不可变数据类型的赋值操作相同了,b和a不再相同。