专栏文章
Python 可变对象和不可变对象
个人记录参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @miojrsnv
- 此快照首次捕获于
- 2025/12/02 20:21 3 个月前
- 此快照最后确认于
- 2025/12/02 20:21 3 个月前
在Python中,对象可分为可变对象(Mutable Objects)和不可变对象(Immutable Objects)。这两者的主要区别在于对象创建后,其内部状态能否被修改。
不可变对象 (Immutable Objects)
不可变对象一旦创建,其值就不能被改变。任何对不可变对象进行“修改”的操作,实际上都是创建了一个新的对象。
常见的不可变对象包括:
- 数字类型:
int(整型)、float(浮点型)、complex(复数) - 字符串:
str - 元组:
tuple - 冻结集合:
frozenset
举个例子,当你对一个字符串进行拼接操作时:
PYTHONs = "Hello"
s = s + " World"
print(s) # 输出 "Hello World"
虽然看起来
s 的值改变了,但实际上,s + " World" 这个操作创建了一个新的字符串对象 "Hello World",然后将 s 指向了这个新对象,而原始的 "Hello" 字符串对象并没有被修改。可变对象 (Mutable Objects)
可变对象创建后,其内部状态可以被修改,而对象的内存地址保持不变。
常见的可变对象包括:
- 列表:
list - 字典:
dict - 集合:
set - 自定义类实例
例如,当你修改一个列表时:
PYTHONmy_list = [1, 2, 3]
print(id(my_list)) # 查看初始内存地址
my_list.append(4)
print(id(my_list)) # 内存地址不变
print(my_list) # 输出 [1, 2, 3, 4]
这里,
append() 方法直接在原有的 my_list 对象上进行了修改,并没有创建新的列表对象。可变与不可变对象的影响
理解可变与不可变对象的区别非常重要,它会影响到你编写代码的方式,尤其是在以下几个方面:
-
函数参数传递:
- 当不可变对象作为参数传入函数时,函数内部对它的“修改”不会影响到函数外部的原始对象。
- 当可变对象作为参数传入函数时,函数内部对它的修改会直接反映到函数外部。
-
字典的键:
- 由于字典的键必须是可哈希的(hashable),而可哈希的对象必须是不可变的,因此只有不可变对象(如字符串、元组)才能作为字典的键。列表、字典等可变对象不能作为字典的键。
-
性能:
- 在某些情况下,对可变对象进行原地修改(in-place modification)比创建新对象更有效率。
简而言之,可变对象就像一块可以被雕刻的粘土,而不可变对象就像一个玻璃球,一旦成型就不能改变,任何“改变”都需要一个全新的玻璃球。
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...