1.Objects in Python
Python中*万物皆对象, *每个对象均包含以下三个属性:
- Identity—对象id,指在内存中的地址,又称为**标识。**可通过
id(object)函数得到 - Type—所创建对象的类型。例如 int, list 。可通过
type(object)函数得到 - Value—对象所保存的值。例如列表对象
list=[1,2,3]包含值1,2,3
对象一旦被创建,其 ID 和 Type 便不能被修改,Value能否修改取决于对象类型。
根据对象中的Value是否可被修改,将Python中的对象分为了可变对象(Mutable Objects)和不可变对象(Immutable Objects)
2.List of Mutable and Immutable objects
不可变对象: int, float, complex, string, tuple, frozen set[note: immutable version of set]*, bytes ***可变对象: **list, dict, set, byte array
至于用户自定义类是否可变,完全取决于用户编写的代码
3.Non transitive nature of Immutability
不可变对象中包含着可变对象
例:创建一个元组(不可变对象),里面包含两个列表(可变对象)
可见,尽管对象person是元组类型为不可变对象,但是person里面的列表可以被修改。这是因为这里我们没有改变Tuple中的对象引用,只是改变了被引用的对象值。通俗来讲,元组里面包含的子对象的id不可改,但id所指的子对象的值能改(是否可改取决于子对象的类型)
The “value” of an immutable object can’t change, but it’s constituent objects may can.
可变对象中包含不可变对象
例,创建一个包含俩元组的列表
所以,可变对象的值可变,不可变对象的值不可变。对嵌套对象,外层的不可变对象仅指其包含引用不可变,至于该引用所指的对象是否可变,取决于所指对象类型。
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