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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python中对象的引用和共享引用相关的知识,希望对你有一定的参考价值。

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

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

共享引用:

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

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

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

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

技术分享

 

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

技术分享

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

以上是关于Python中对象的引用和共享引用的主要内容,如果未能解决你的问题,请参考以下文章

python内存机制引用和赋值

9.python 共享引用与单例

具有共享对象引用的两个变量的总大小是多少? [复制]

Python学习之引用和对象

python 引用

python引用和对象详解