Python可变对象和不可变对象详解
在Python中,对象分为可变对象和不可变对象。对于可变对象,我们在操作它时可以改变它的值,而不可变对象在创建之后就无法改变。
Python的基本数据类型中有五种不可变对象:数字、字符串、元组、不可变集合和不可变字典。除此之外,其他类型都是可变对象,比如列表、字典、集合等。
不可变对象
数字
数字不可变是因为它们是按值传递的,这在Python中称为传递不可变的引用。这意味着数字变量只是对数字对象的引用,而不是数字本身。当你给一个数字变量重新赋值时,它实际上是创建了一个新的数字对象,并将变量的引用指向该新对象。
示例:
a = 1
print(id(a)) # 140722904519792
a = 2
print(id(a)) # 140722904519824
从上面的代码中可以看到,当我们将a赋值为2时,id(a)的值也改变了,这说明a现在指向的是一个新的数字对象。
字符串
字符串也是不可变的对象。这意味着当我们尝试修改一个字符串时,其实是创建了一个新的字符串对象,并将原始字符串对象的引用替换为新字符串对象的引用。
示例:
a = "hello world"
print(id(a)) # 140722904423024
a = a + "!"
print(id(a)) # 2934357370576
从上面的代码中可以看到,当我们将a赋值为"hello world!"时,id(a)的值也改变了,这说明a现在指向的是一个新的字符串对象。
可变对象
列表
列表是Python中最常用的可变对象之一。当我们在列表上进行任何操作时,它们是对原始对象进行操作,而不是创建一个新的副本。这意味着当我们修改列表中的一个元素时,列表对象本身不会发生变化,只是该元素的值会改变。
示例:
a = [1, 2, 3, 4]
print(id(a)) # 2934357362248
a[0] = 5
print(id(a)) # 2934357362248
print(a) # [5, 2, 3, 4]
从上面的代码中可以看到,虽然我们改变了列表中的第一个元素,但列表对象本身的ID并没有改变。
字典
字典也是Python中可变对象之一。当我们在字典上进行任何操作时,它们也是对原始对象进行操作,而不是创建一个新的副本。这意味着当我们在字典中添加或删除键值对时,字典对象本身不会发生变化,只是其中的键值对会变化。
示例:
a = {'x': 1, 'y': 2}
print(id(a)) # 2934357361672
a['z'] = 3
print(id(a)) # 2934357361672
print(a) # {'x': 1, 'y': 2, 'z': 3}
从上面的代码中可以看到,虽然我们在字典中添加了一个新的键值对,但是字典对象本身的ID并没有改变。
总结
Python中的可变对象和不可变对象是编程过程中需要了解和掌握的一个重要概念。对于不可变对象而言,我们需要注意每次操作时都会创建新的对象;而对于可变对象而言,我们需要注意对象本身的ID不会发生变化。在实际编程过程中,了解对象的可变性可以帮助我们更好地理解Python中的数据结构和算法。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python可变对象,不可变对象详解 - Python技术站