Python 可变 & 不可变数据类型
文章介绍了 Python 中的可变和不可变数据类型,包括整数、浮点数、布尔值、字符串、元组、冻结集合、列表、字典和集合。讨论了不可变类型如何提高程序运行效率和保证数据安全性,以及可变类型如何通过动态调整内存空间来管理数据。文章还解释了为什么不可变类型是字典键的要求,并分析了不可变和可变类型的实现机制。
在 Python 语言中,数据类型大致可以分为可变和不可变两种。以下是它们的一些例子:
不可变数据类型:
- 整数(int):如 2、3、4、5。
- 浮点数(float):如 2.3、4.6、5.0。
- 布尔(bool):True 或 False。
- 字符串(str):如 ‘hello’、’world’。
- 元组(tuple):如 (1, 2, 3)。元组内的元素不可变。
- 冻结集合(frozenset):如 frozenset([1,1,2,3,4])。
可变数据类型:
- 列表(list):如 [1, 2, 3]。列表元素可以增加或删除。
- 字典(dict):如 {‘name’: ‘Tom’, ‘age’: 20}。字典的键值对可以新增或修改。
- 集合(set):如 {1,2,3,4}。集合元素可以增加或删除。
需要注意的是,不可变并不代表赋值以后就不能改变了,里面的值可以改变,就比如元组,元组一旦创建就不能改变,但是如果元组里面嵌套的是一个列表就能改变了,因为改变的是列表。就像家的门是不能换的,但是家里的人是可以随时变的
Python 中的不可变类型和可变类型都有各自的重要性,二者的存在使得 Python 在处理不同的数据时更加灵活。
为什么要有不可变类型:
- 提高程序运行效率:由于 Python 的不可变类型在被创建后不允许修改,这意味着可以预先知道它们的长度,位置等信息,这为底层优化提供了可能,可以大大提高程序的运行速度。
- 保证数据安全性:不可变类型的数据不能被修改,可以放心地传递和使用,不用担心被误修改,增加代码的稳定性和可靠性。
- 作为字典的键:在 Python 中,字典的键需要是可哈希的,也就是不可变的,所以不可变类型的对象可以作为字典的键。
不可变类型是如何实现的:
不可变类型的实现基于 Python 的内存管理机制,当你创建了一个不可变类型的对象后,Python会为其分配一个固定的内存空间来保存它,该空间的内容是不可以改变的。如果你尝试去更改这个对象的值,Python 实际上是创建了一个新的对象和新的内存,而旧的内存块如果没有引用会被 Garbage Collector 回收。
可变类型是如何实现的:
对于可变类型的对象,Python 在初始化时并不会立即分配内存来存储值,而是为其创建一个可动态调整大小的内存空间,当你向其中添加元素时,Python 会改变这个空间的大小。如果你尝试更改它,Python 将在原地修改,而不是创建新的对象。
1 |
|
测试
1 | def ed(args): |
Python 可变 & 不可变数据类型
https://www.mutter.cn/2024/04/24/python/Python 可变 & 不可变数据类型/