Python中对象的引用和共享引用,,在Python中先创


在Python中先创建一个对象,然后再将变量指向所创建的对象。

对于每个对象,都有一个头部信息,在信息中就标记了这个对象的类型信息。每当一个变量名被赋予了一个新的对象,之前那个对象占用的空间就回被回收(如果此时这个对象没有被别的变量名或者对象所引用的话)。另外,在python中,每个对象都保有一个计数器,计数器中记录了这个对象被引用的次数,当这个计数器被置为0时,对象所占用的内存空间就会被释放,即当做垃圾回收。

共享引用:

在python中,变量总是一个指向对象的指针,而不是可以改变的内存区域标签。给一个变量赋予一个新的值,不是替换了原始的对象,而是让这个变量去引用一个新的对象,实际效果就是对变量重新赋值,这仅仅会影响到那个被重新赋值的变量。

另外,在这里说一下 “ == ”和“ is ”这个操作符

==,和C语言中的作用是一样的,测试两个被引用的对象的值是否一致;

is,检查两个对象的同一性,判断两个对象名是否指向同一地址空间,如果是则返回True。如图,

技术分享

创建两个列表对象,即使它们的值相同,也是来源于不同的空间。因此is的比较结果为假

技术分享

也许有的朋友测试了一个如上图的例子,结果 is 竟然返回True。这不是代表它们是指向同一个对象,而是在内存中,小的整数和字符串被缓存复用了,所以is才告诉我们a和b是引用了相同的对象。

Python中对象的引用和共享引用

评论关闭