📜  python中的可变和不可变(1)

📅  最后修改于: 2023-12-03 14:46:39.962000             🧑  作者: Mango

Python中的可变和不可变

Python中的数据类型可以分为可变和不可变两种类型。可变的数据类型是指一旦创建后可以改变其值,而不可变的数据类型则是指创建后其值不能被改变。本文将介绍Python中的这两种数据类型。

不可变类型

Python中的不可变类型包括整数(int)、浮点数(float)、布尔值(bool)、字符串(str)、元组(tuple)和冻结集合(frozenset)。

不可变类型的特点是创建后不可更改,试图修改不可变类型的值会导致TypeError。如下例:

x = 1
x += 2  # x = x + 2
print(x)  # 输出3

y = "hello"
y[0] = "H"  # 尝试修改字符串的值,导致TypeError

上例中,整数类型的x可以被改变,字符串类型的y却不行。

可变类型

Python中的可变类型包括列表(list)、字典(dict)和集合(set)。

可变类型的特点是创建后可以改变其值。如下例:

x = [1, 2, 3]
x.append(4)  # 向列表中添加一个元素
print(x)  # 输出[1, 2, 3, 4]

y = {"name": "Alice", "age": 18}
y["age"] = 20  # 修改字典中的值
print(y)  # 输出{"name": "Alice", "age": 20}

可变类型的值可以被改变,可以通过添加、删除、修改等操作改变其内容。

可变和不可变的区别

可变和不可变类型的主要区别在于对数据类型的改变操作。对于可变类型,改变操作会影响到相同对象的所有引用。而不可变类型则不会受到影响,因为不可变类型的值是不可更改的。

下面是一个例子:

a = [1, 2, 3]
b = a
print(a)  # 输出[1, 2, 3]
print(b)  # 输出[1, 2, 3]

# 对a进行改变操作
a.append(4)
print(a)  # 输出[1, 2, 3, 4]
print(b)  # 输出[1, 2, 3, 4]

在上例中,列表a和b指向同一对象,因此对a进行的append操作也会影响到b。这是因为列表是可变类型,通过改变一个引用的值,相应地改变了指向同一对象的其他引用的值。

而对于不可变类型,改变操作则会创建一个新对象。如下例:

a = "hello"
b = a
print(a)  # 输出hello
print(b)  # 输出hello

# 尝试修改a的值
a = "world"
print(a)  # 输出world
print(b)  # 输出hello,不受影响

在上例中,字符串a和b指向同一对象,但是当a的值改变时,实际上创建了一个新对象,并让a指向这个新对象,而b还指向原来的对象。

总结

本文介绍了Python中两种数据类型:可变和不可变。不可变类型包括整数、浮点数、布尔值、字符串、元组和冻结集合,创建后不可更改。可变类型包括列表、字典和集合,创建后可改变其值。可变类型的值改变会影响到相同对象的所有引用,不可变类型则不会受到影响。