python的不可变数据类型和可变数据类型的区别详解

不可变数据类型和可变数据类型的区别

不可变数据类型

  • 不可变数据类型immutable:一般为基本数据类型,仅存储一个数值的数据类型,元组例外,如 int、long、float、string、元组,当创建一个变量时,变量内存储了指向值的地址,该地址处的值不会发生改变,当对变量重新赋值时,实际上是变量内的地址发生了改变。
    例如创建a = 1,a内存储的地址指向1,令b = a,b中存储和a相同的地址。python的不可变数据类型和可变数据类型的区别详解

当重新赋值a = 0,a内存储的地址发生变化指向0,而b的地址不变所以值依然为1:
python的不可变数据类型和可变数据类型的区别详解

可变数据类型

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