Python中的对象可以分为可变对象和不可变对象。
可变对象:
- 列表(list)
- 字典(dict)
- 集合(set)
不可变对象:
- 数字(int, float, complex)
- 字符串(str)
- 元组(tuple)
两者的主要区别是:
- 可变对象在修改时可以直接在原对象上进行,不可变对象不能在原对象上修改,必须创建新对象。
## python www.itzhimei.com 代码
lst = [1, 2]
lst.append(3) # 在原列表上修改
tup = (1, 2)
tup += (3,) # 不能在原元组上修改,必须创建新元组
- 可变对象作为函数参数时,在函数内部可能会被修改,不可变对象作为参数是安全的。
## python www.itzhimei.com 代码
def add_item(lst):
lst.append(4) # 修改传入的列表
def concat_tuple(a, b):
return a + b # 不修改参数元组
- 可变对象不可散列,不可作为字典键使用;不可变对象可以散列,可以作为字典键。
## python www.itzhimei.com 代码
dct = {[1,2]: 'list'} #错误,[1,2]是列表,可变的
dct = {(1,2): 'tuple'} #正确,元组是不可变的
- 进行比较时,可变对象比较的是对象引用,不可变对象比较的是值。
## python www.itzhimei.com 代码
a = [1, 2]
b = [1, 2]
print(a is b) # False,比较引用
print(a == b) # True,比较值
总之,正确理解它们的区别,可以避免错误,写出更加安全和优雅的代码。