📜  Python中的可变对象与不可变对象

📅  最后修改于: 2022-05-13 01:55:06.155000             🧑  作者: Mango

Python中的可变对象与不可变对象

Python中的每个变量都包含一个对象的实例。 Python中有两种类型的对象,即MutableImmutable 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']

结论

  1. 可变和不可变对象在Python中的处理方式不同。不可变对象访问速度更快,并且更改成本很高,因为它涉及创建副本。
    而可变对象很容易改变。
  2. 当需要更改对象的大小或内容时,建议使用可变对象。
  3. 例外:但是,不变性也有例外。我们知道Python中的元组是不可变的。但是元组由一系列名称组成,这些名称与对象的绑定不可更改。
    考虑一个元组
    tup = ([3, 4, 5], 'myname') 

    元组由一个字符串和一个列表组成。字符串是不可变的,所以我们不能改变它的值。但是列表的内容可以改变。元组本身不是可变的,但包含可变的项目。

作为一个经验法则,General Primitive-like 类型可能是不可变的,而 Customized Container-like 类型大多是可变的。