Python 可变与不可变数据类型
引用变量
在大多数编程语言中,值的传递通常可以分为两种形式:值传递与引用(地址)传递。但是在 Python 中,变量的传递基本上都是引用(地址)传递。
变量在内存底层的存储形式
a = 10
第一步:在计算机内存中创建一个数值为 10(占用一块内存空间)。 第二步:在栈空间中声明一个变量,如 a。 第三步:把数值 10 的内存地址赋予给变量 a,形成所谓的'引用关系'。
变量的引用关系
使用内置方法 id(),其参数就是要显示的变量信息,id(变量名称) 查询内存地址。
a = 10
print(id(a))
把一个变量赋予给另一个变量
a = 10
b = a
print(id(a))
print(id(b))
说明:由以上运行结果可知,当我们把一个变量赋予给另外一个变量时,其两者指向的内存地址相同。可知 a 和 b 指向了同一块内存空间。
若 b = a 以后,改变了变量 a 的值,变量是否会改变呢?
a = 10
b = a
a = 100
print(b) # 输出 10
print(id(a))
print(id(b))
原理图略。
总结:不可变数据类型(如数值)在赋值以后,其中一个值的改变不影响另外一个变量,因为两者指向的空间地址不同(重新赋值创建了新的对象)。
可变和非可变数据类型
数据类型
Python 中一共有 7 种主要数据类型:数值(int 整型、float 浮点类型)、bool 类型(True 和 False)、字符串类型(str)、元组(tuple)、列表(list)、字典(dict)、集合(set)。
将以上 7 种数值类型分为两大类型:可变类型和不可变类型。
可变类型:内存地址一旦固定,其值是可以发生改变的。
- 列表(list)
- 字典(dict)
- 集合(set)
不可变类型:内存地址一旦固定,其值是不可以发生改变的。
- 数值(int 整型、float 浮点类型)
- bool 类型(True 和 False)
- 字符串类型(str)
- 元组(tuple)
判断数据类型是可变型还是非可变型
在 Python 中,可变类型与非可变类型主要是通过这个数据类型在内存中的表现形式来进行定义的。
可变类型就是在内存中,其内存地址一旦固定,其变量的值是可以发生改变的

