可变不可变
Python中的可变类型主要包括:
- list(列表)
- dict(字典)
- set(集合)
- bytearray(字节数组)
- 用户自定义的类实例(通常情况下)
可变类型的特点
可变类型被称为"可变"是因为:
- 对象内容可以修改:可以在不改变对象身份(内存地址)的情况下修改其内容
- 原地修改:可以通过方法直接修改对象,而不需要创建新对象
- 共享引用影响:多个变量引用同一对象时,修改会影响所有引用
不可变类型及其特点
不可变类型包括:
- int(整数)
- float(浮点数)
- str(字符串)
- tuple(元组)
- frozenset(冻结集合)
- bytes(字节串)
- bool(布尔值)
- complex(复数)
这些类型被称为"不可变"是因为:
- 内容不能修改:一旦创建,对象的内容就不能被改变
- 操作产生新对象:对这些类型进行操作时会创建新的对象
- 引用独立:修改一个引用不会影响其他引用
核心区别
主要区别在于对象的身份(id) 是否会在修改操作中改变:
- 可变类型:修改内容时,对象的 id 不变
- 不可变类型:任何"修改"操作都会产生新对象,原对象的 id 保持不变
对象的身份(id) 其实就是指对象的内存地址。在Python中id可以打印变量地址,变量本质上是引用而不是对象本身,不可变类型的对象就是它的内存就是不可变的,例如对于int类型的变量a,我们对它进行-1操作,其实它是指向了一块新的内存,旧内存仍然是1不改变等待被回收,也就是说旧对象没变动,而是创建了新对象,让该变量指向新对象。