Python中的可变类型和不可变类型

不可变数据类型

Python中不可变数据类型的定义为:当该数据类型的对应变量的值发生了改变,那么它对应的内存地址也会发生改变,就称不可变数据类型,包括:int(整型)、string(字符串)、tuple(元组)。

下面以一个整型数为例,演示int型,修改值前后内存地址的变化。

id()函数用于获取对象的内存地址;type()函数用于返回对象的类型。

x = 365
print(id(x), type(x))
# 输出:2416500343024 <class 'int'>

x = 24
print(id(x), type(x))
# 输出:2416500343056 <class 'int'>

以上代码显示,当x的值发生改变的时候,变量的内存地址也发生了改变。所以整型是不可变的数据类型。

对不可变类型的变量重新赋值,实际上是重新创建一个不可变类型的对象,并将原来的变量重新指向新创建的对象(如果没有其他变量引用原有对象的话(即引用计数为0),原有对象就会被回收)。

可变数据类型

当变量的值发生了改变,它对应的内存地址不发生改变,这种类型的变量就称可变数据类型。包括:set(集合)、list(列表)、dict(字典)。

set1 = {1, 2, 3}
print("集合:", set1, "内存地址:", id(set1), "\t", "数据类型:", type(set1), "\t")
# 集合: {1, 2, 3} 内存地址: 2416400363027     数据类型: <class 'set'>    


set1.add(5)
print("集合:", set1, "内存地址:", id(set1), "\t", "数据类型:", type(set1), "\t")
# 集合: {1, 2, 3, 5} 内存地址: 2416401363029    数据类型: <class 'set'>