Skip to content
BaiRuic's Blog
Go back

Python 可变对象 vs 不可变对象

Updated:

1.Objects in Python

Python中*万物皆对象, *每个对象均包含以下三个属性:

  1. Identity—对象id,指在内存中的地址,又称为**标识。**可通过id(object)函数得到
  2. Type—所创建对象的类型。例如 int, list 。可通过type(object)函数得到
  3. Value—对象所保存的值。例如列表对象list=[1,2,3] 包含值1,2,3
📌

对象一旦被创建,其 ID 和 Type 便不能被修改,Value能否修改取决于对象类型。

根据对象中的Value是否可被修改,将Python中的对象分为了可变对象(Mutable Objects)和不可变对象(Immutable Objects)

2.List of Mutable and Immutable objects

Python内置类型对象的可变与不可变

不可变对象int, float, complex, string, tuple, frozen set[note: immutable version of set]*, bytes ***可变对象: **list, dict, set, byte array

至于用户自定义类是否可变,完全取决于用户编写的代码

3.Non transitive nature of Immutability

不可变对象中包含着可变对象

例:创建一个元组(不可变对象),里面包含两个列表(可变对象)

Untitled 74

可见,尽管对象person是元组类型为不可变对象,但是person里面的列表可以被修改。这是因为这里我们没有改变Tuple中的对象引用,只是改变了被引用的对象值。通俗来讲,元组里面包含的子对象的id不可改,但id所指的子对象的值能改(是否可改取决于子对象的类型)

The “value” of an immutable object can’t change, but it’s constituent objects may can.

可变对象中包含不可变对象

例,创建一个包含俩元组的列表

Untitled 75

所以,可变对象的值可变,不可变对象的值不可变。对嵌套对象,外层的不可变对象仅指其包含引用不可变,至于该引用所指的对象是否可变,取决于所指对象类型。

The “value” of an mutable object can change, but it’s constituent objects may can’t.

4.Reference

Understand What is Mutable and Immutable in Python (mygreatlearning.com)

Mutable vs Immutable Objects in Python | by megha mohan | Medium

Mutability and Immutability in Python — Let’s Break It Down


Share this post:

Previous Post
sklearn-SVM 参数理解
Next Post
Python容器、迭代器、生成器