当我们使用 Python 编程时,经常会遇到可变数据类型和不可变数据类型的概念。在 Python 中,所有数据类型都可以分为可变和不可变两类。
什么是Python的可变数据类型和不可变数据类型?
Python 中的可变数据类型是指数据在内存中的值可以被修改,而不会改变它的地址。Python 中的不可变数据类型是指其值在内存中不可被修改,如需修改需重新分配内存空间。
Python 中的不可变数据类型包括:数字、字符串、元组;
Python 中的可变数据类型包括:列表、字典、集合等。
可变数据类型和不可变数据类型的特点
不可变数据类型
对于不可变数据类型,如果修改其对象的值,Python 会重新为该对象分配内存空间,并将新值保存在新的内存空间中。这也就意味着,对于不可变数据类型的修改操作无法实现原地修改,而是需要重新指定一个新变量名称替换原变量。
示例1:字符串变量的不可变性质
str1 = "hello"
str2 = str1
str1 = "world"
print(str1) # 输出 "world"
print(str2) # 输出 "hello"
示例2:元组变量的不可变性质
tup1 = ('a', 'b', 'c')
tup2 = tup1
tup1 = (1, 2, 3)
print(tup1) # 输出 (1, 2, 3)
print(tup2) # 输出 ('a', 'b', 'c')
可变数据类型
对于可变数据类型,如果修改其对象的值,Python 会直接在原有的内存空间中修改该对象,并且不会为该对象重新分配内存空间。
示例1:列表变量的可变性质
lst1 = [1, 2 ,3]
lst2 = lst1
lst1[0] = 0
print(lst1) # 输出 [0, 2 ,3]
print(lst2) # 输出 [0, 2 ,3]
示例2:字典变量的可变性质
dict1 = {'a':1, 'b':2, 'c':3}
dict2 = dict1
dict1['a'] = 0
print(dict1) # 输出 {'a': 0, 'b': 2, 'c': 3}
print(dict2) # 输出 {'a': 0, 'b': 2, 'c': 3}
总结
从上述示例可以看出,对于不可变数据类型,修改其对象的值会创建一个新的对象并修改指针,而原有的对象不会改变;对于可变数据类型,修改其对象的值会直接在原有的对象上进行修改。因此在代码编写过程中,应该尽可能地使用不可变数据类型,以免出现意外的错误。