Python中的可变对象与不可变对象
Python中的每个变量都包含一个对象的实例。 Python中有两种类型的对象,即Mutable和Immutable objects 。每当实例化一个对象时,都会为其分配一个唯一的对象 ID。对象的类型是在运行时定义的,之后不能更改。但是,如果它是可变对象,则可以更改其状态。
总结一下区别,可变对象可以改变它们的状态或内容,而不可变对象不能改变它们的状态或内容。
- 不可变对象:这些是内置类型,如int、float、bool、 字符串、unicode、tuple 。简单来说,不可变对象创建后就无法更改。
# Python code to test that # tuples are immutable tuple1 = (0, 1, 2, 3) tuple1[0] = 4 print(tuple1)
错误 :
Traceback (most recent call last): File "e0eaddff843a8695575daec34506f126.py", line 3, in tuple1[0]=4 TypeError: 'tuple' object does not support item assignment
# Python code to test that # strings are immutable message = "Welcome to GeeksforGeeks" message[0] = 'p' print(message)
错误 :
Traceback (most recent call last): File "/home/ff856d3c5411909530c4d328eeca165b.py", line 3, in message[0] = 'p' TypeError: 'str' object does not support item assignment
- 可变对象:这些是list、dict、set类型。自定义类通常是可变的。
# Python code to test that # lists are mutable color = ["red", "blue", "green"] print(color) color[0] = "pink" color[-1] = "orange" print(color)
输出:
['red', 'blue', 'green'] ['pink', 'blue', 'orange']
结论
- 可变和不可变对象在Python中的处理方式不同。不可变对象访问速度更快,并且更改成本很高,因为它涉及创建副本。
而可变对象很容易改变。 - 当需要更改对象的大小或内容时,建议使用可变对象。
- 例外:但是,不变性也有例外。我们知道Python中的元组是不可变的。但是元组由一系列名称组成,这些名称与对象的绑定不可更改。
考虑一个元组tup = ([3, 4, 5], 'myname')
元组由一个字符串和一个列表组成。字符串是不可变的,所以我们不能改变它的值。但是列表的内容可以改变。元组本身不是可变的,但包含可变的项目。
作为一个经验法则,General Primitive-like 类型可能是不可变的,而 Customized Container-like 类型大多是可变的。