关于python中对象可变性的理解

在python中,每个对象都有各自的编号、类型和值。一个对象被创建后,在此对象的生命周期中编号保证是唯一且恒定的。你可以将其理解为该对象在内存中的地址。 'is' 运算符可以比较两个对象的编号是否相同;id() 函数能返回一个代表其编号的整型数。

下面变量a和变量b指向的对象以及对象[1]在内存中的地址都是不同的。尽管值相同,但它们是三个不同的对象。

下面的变量a指向的对象虽然值发生了改变,但在内存中的地址并没有变化,还是同一个对象。

 

在python中有些对象的值是可以改变的。通常情况下我们称值可以改变的对象为可变对象,如列表和字典;值不可以改变的对象为不可变对象,如数字、字符串和元组。但有些对象可包含对其他对象的引用,如元组、列表和字典等,这些引用是该对象值的一个组成部分。如下图中列表a=[1,2],元组b=(a,'aa',1),当a的值改变时,如a.append('3'),则元组b的值也会改变,但是元组b的编号并未发生改变,其仍属于不可变对象。因此,不可变并不严格等同于值不能改变,元组b的值指的是所包含对象的具体值而不是对象的编号(内存地址)。所以,当我们谈论一个对象的可变性时,要注意区别对待。

 

 另外,当空元组a=(),b=(),则两者指向的是同一对象,当空列表c=[],d=[],则c和d会指向两个不同的单独的新建空列表。

 

 

 非空则另当别论。

 

 

 

posted @ 2022-05-23 06:36  天青色wy  阅读(137)  评论(0编辑  收藏  举报