Python初学____探究_____(1)可变对象 不可变对象理解

1.  可变对象 & 不可变对象

①对于Python来说,变量=对象 的含义表示着 将该变量作为一个引用绑定到该对象上,当绑定完成后 即可通过变量名使用该对象。 一个对象不存在任何对象引用的时候,就进入了垃圾收集的过程(自动回收机制)。

②对于多元素的数据结构,如list,tuple,dict,其实现是通过指针数组来绑定到目标对象。

1.1可变对象

    在Python中的可变对象往往是多元素的数据结构,其大部分都是通过指针数组去绑定到元素对象的多元素可变对象中的可变,是指这个指针数组是可变的(指针数组可扩展缩小,数组元素可修改)

例1:

lt1 = ["sy","wsx","syf",100]

print(id(lt1))

lt1[0] = "wsx"

lt1.append(99)

print(id(lt1))

print(id(lt1[1]))

print(lt1)

    在例1中,我们修改lt1[0]="wsx",就是要修改指针数组中 0号指针,使其绑定到值为"wsx"的对象上,由于其之前绑定的"sy"为字符串属于非可变对象,所以其必须舍弃再创建一个"wsx",由于之前内存中已经有了一个"wsx",所以我们让他绑定到这个。所以可以看到id(lt)和id(lt[1])多的结果相同。同理,我们让lt1增加一个元素,由于其是可变对象,直接在数组尾部插入一个元素指向100这个对象即可。

    在上述过程中,这些多元素的可变对象的数组指针发生了改变

 

1.2不可变对象

    现在学到的Python不可变对象中,基本可以分为两类:一类是 通过指针数组实现的(如tuple),另一类则是没有通过指针数组实现的

    (1)对于tuple这些通过指针数组实现的不可变对象,不可变主要在于其指针数组不可改变

例1:

tup1 = ("syf","wsx","sy",[100])

tup1[3][0]=99

tup1[3].append(0)

print(tup1)

 

   可以看到tup1为不可变对象,但是最终其tup[3]的元素仍然被修改了,但在这个过程中我们没有修改 tup1指针数组中的指针元素,tup[3]仍指向原来的list。

 

 

 

   (2) 另一类则是像类似str,int这样的不可变,其不可变主要体现在 内容不可变。对于采用非数组指针形式的不可变对象,若我们修改时其会直接传创建一个新的目标对象。

i = 73  

i += 2

 

 

posted @ 2018-04-18 16:44  Stan康永  阅读(140)  评论(0编辑  收藏  举报