Python中的不可变数据类型与可变数据类型详解
Python中的数据类型分为两类:不可变(Immutable)和可变(Mutable)。不可变类型的值在创建后不能修改,当尝试修改时,Python会创建一个新的对象并返回新对象引用,而不是修改原对象。而可变类型的值是可以修改的,原对象的引用不会变。
以下是常见的Python中的不可变数据类型和可变数据类型:
不可变数据类型
整型(int)
整型是最常见的不可变数据类型。整型在Python中表示整数,例如:
x = 5
上面的代码创建了一个整型变量,并将值赋为5。如果我们尝试修改它:
x = 10
这并不是修改了整数变量的值,而是创建了一个新的整型变量,其值为10,并将这个新的引用赋值给x。原始的整数变量被保留在内存中。
字符串(str)
字符串也是不可变的。字符串一旦被创建,它的值就不能被更改。例如:
s = 'hello'
我们可以对字符串进行索引操作,但不能更改它:
print(s[0]) # Output: 'h'
s[0] = 'a' # TypeError: 'str' object does not support item assignment
Python会抛出TypeError异常,因为字符串是不可变的。如果我们想要改变字符串,我们需要创建一个新的字符串对象。
元组(tuple)
元组也是不可变的。一旦创建了元组,就不能修改它的值或者元素。例如:
t = (1, 2, 3)
元组的元素可以通过索引访问,但不能更改它们的值:
print(t[0]) # Output: 1
t[0] = 4 # TypeError: 'tuple' object does not support item assignment
不可变集合(frozenset)
不可变集合(frozenset)同样是不可变的,一旦创建就不能修改。例如:
fs = frozenset([1, 2, 3])
我们可以通过索引操作访问不可变集合的元素,但不能进行修改:
print(fs[0]) # Output: TypeError: 'frozenset' object does not support indexing
fs.add(4) # AttributeError: 'frozenset' object has no attribute 'add'
尝试对不可变集合进行修改会抛出类似TypeError和AttributeError的错误。
可变数据类型
列表(list)
列表(list)是最常见的可变数据类型之一。与不可变类型不同的是,列表的值可以进行修改。例如:
lst = [1, 2, 3]
我们可以使用索引来访问列表的值,也可以使用索引来修改它们:
print(lst[0]) # Output: 1
lst[0] = 4
print(lst) # Output: [4, 2, 3]
字典(dict)
字典(dict)也是一种可变类型,可以添加、修改或删除其中的键值对。例如:
dict = {'a': 1, 'b': 2}
在字典中,我们可以使用键来查找和更改值:
print(dict['a']) # Output: 1
dict['a'] = 3
print(dict) # Output: {'a': 3, 'b': 2}
总结
不可变类型的值在创建后就不能被更改,而可变类型的值是可以修改的。在编写程序时,需要根据需要选择适当的数据类型,并注意如何将它们传递给函数和修改其中的值。
在Python中,不可变数据类型包括int、str、tuple和frozenset;可变数据类型包括list和dict。
示例:
# Example1 - 可变类型
lst = [1, 2, 3]
def func(list):
list[0] = 4
func(lst)
print(lst) # Output: [4, 2, 3]
# Example2 - 不可变类型
a = 5
b = a
a += 2
print(b) # Output: 5
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python中的不可变数据类型与可变数据类型详解 - Python技术站