【Python】Python可变对象和不变对象有何不同之处?

Python中的对象可以分为可变对象和不可变对象。

可变对象:

  • 列表(list)
  • 字典(dict)
  • 集合(set)

不可变对象:

  • 数字(int, float, complex)
  • 字符串(str)
  • 元组(tuple)

两者的主要区别是:

  1. 可变对象在修改时可以直接在原对象上进行,不可变对象不能在原对象上修改,必须创建新对象。
## python www.itzhimei.com 代码
lst = [1, 2]
lst.append(3) # 在原列表上修改

tup = (1, 2)
tup += (3,) # 不能在原元组上修改,必须创建新元组
  1. 可变对象作为函数参数时,在函数内部可能会被修改,不可变对象作为参数是安全的。
## python www.itzhimei.com 代码
def add_item(lst):
    lst.append(4) # 修改传入的列表

def concat_tuple(a, b):
    return a + b # 不修改参数元组
  1. 可变对象不可散列,不可作为字典键使用;不可变对象可以散列,可以作为字典键。
## python www.itzhimei.com 代码
dct = {[1,2]: 'list'} #错误,[1,2]是列表,可变的
dct = {(1,2): 'tuple'} #正确,元组是不可变的
  1. 进行比较时,可变对象比较的是对象引用,不可变对象比较的是值。
## python www.itzhimei.com 代码
a = [1, 2]
b = [1, 2] 

print(a is b) # False,比较引用 
print(a == b) # True,比较值

总之,正确理解它们的区别,可以避免错误,写出更加安全和优雅的代码。