Python中可变和不可变对象的深入讲解
在Python中,对象分为可变对象和不可变对象。在程序中使用对象时,了解它们的可变性是至关重要的。
不可变对象
不可变对象一旦被创建,就不能被改变。在Python中,整数、浮点数、字符串、元组和冻结集合(frozenset)都是不可变对象。
举个例子:
a = 10
b = a
a = 20
print(a, b) # 输出 20 10
在上面的例子中,整数10是不可变对象,所以当我们将a的值赋给b时,实际上是创建了一个新的对象,并将该对象的引用赋给b。当我们改变a的值时,实际上是创建了一个新的对象并将该对象的引用赋给a。
再看一个例子:
s = "hello"
t = s
s += " world"
print(s, t) # 输出 hello world hello
在上面的例子中,字符串s是一个不可变对象,当我们将s的值赋给t时,实际上是将t指向了同一个对象。当我们使用加号操作符给s添加一个新的字符串时,实际上是创建了一个新的字符串,并将该字符串的引用赋给s,而不是修改原始的字符串。t仍然指向原始的字符串。
可变对象
可变对象在创建后可以被改变。在Python中,列表、字典、集合和自定义的类实例都是可变对象。
举个例子:
a = [1, 2, 3]
b = a
a.append(4)
print(a, b) # 输出 [1, 2, 3, 4] [1, 2, 3, 4]
在上面的例子中,列表a是一个可变对象,当我们将a的引用赋给b时,实际上是将b指向了同一个对象。当我们通过append()方法改变a的值时,实际上是在原始的列表上添加了一个新的元素,并没有创建一个新的对象。因此,b也会发生改变。
再看一个例子:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
p1 = Person("John", 30)
p2 = p1
p1.age = 40
print(p1.age, p2.age) # 输出 40 40
在上面的例子中,我们定义了一个名为Person的类,它有两个属性:name和age。对象p1和p2都是Person类的实例,当我们将p1的引用赋给p2时,实际上是将p2指向了同一个对象。我们通过修改p1的属性值来改变对象的状态,p2也会受到影响。
总结
- 不可变对象在创建后不能被改变。整数、浮点数、字符串、元组和冻结集合(frozenset)都是不可变对象。
- 可变对象在创建后可以被改变。列表、字典、集合和自定义的类实例都是可变对象。
- 在使用对象时,了解它们的可变性是至关重要的,因为已经使用的对象可能会被改变。
- 如果你想创建一个不可变对象,可以使用元组或者frozenset类型。
- 如果你想创建一个可变对象,可以使用列表、字典或者集合类型。
希望这篇攻略能够帮助你更好地理解Python中的可变和不可变对象。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python中可变和不可变对象的深入讲解 - Python技术站