跳到主要内容

简述Python 中的可变对象和不可变对象? ?

参考答案:

在 Python 中,对象可以被分类为可变对象(mutable)和不可变对象(Immutable)。

不可变对象(Immutable):这些对象一旦创建,其值就不能被改变。常见的不可变对象包括数字(如整数和浮点数)、字符串(str)和元组(tuple)。由于这些对象是不可变的,所以它们在多线程环境中是安全的,因为它们的值不会突然改变,这可以防止出现竞态条件。

例如,尝试更改一个字符串的值会导致 TypeError 异常:

s = "Hello, World!"
s[0] = "h"  # 这将引发 TypeError: 'str' object does not support item assignment

可变对象(Mutable):这些对象在创建后可以被修改。常见的可变对象包括列表(List)、字典(Dictionary)、集合(Set)等。由于这些对象可以被修改,所以在多线程环境中使用它们时需要特别注意,以避免竞态条件和其他并发问题。

例如,可以轻松地更改列表的元素:

l = [1, 2, 3]
l[0] = 0  # 这将成功,列表 l 现在变为 [0, 2, 3]

需要注意的是,虽然列表是可变的,但是列表中的元素本身可能是不可变的。例如,如果你有一个包含字符串的列表,你可以更改列表中的元素(即,指向一个新的字符串),但你不能更改列表中的字符串本身。

l = ["Hello", "World"]
l[0] = "Hi"  # 这是可以的,列表 l 现在变为 ["Hi", "World"]
l[0][0] = "h"  # 这将引发 TypeError: 'str' object does not support item assignment

总的来说,了解 Python 中的可变对象和不可变对象对于理解 Python 的内存管理、线程安全以及如何避免常见的编程错误非常重要。