b = a
print(getrefcount(a)) # 打印3
由于调用 getrefcount() 时又创建了一次引用,所以打印的引用计数会比实际多一个。
2、对象引用对象
Python中对象会引用别的对象,而容器对象的引用会构成很复杂的拓扑结构:
‘’’
遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
‘’’
l = [1,2,3]
d = {“k”: l}
y = [l, d]
z = [y,(l,y)]
使用 objgraph 包可以绘制引用关系:
…
import objgraph
objgraph.show_refs([z], filename=‘sample-graph.png’)
绘制的 z 对象的引用图如下:
3、引用环
两个对象相互引用,即构成了所谓的 引用环 :
a = []
b = [a]
a.append(b)
objgraph.show_refs([a,b], filename=‘a-b.png’)
即使是单个对象,只需自己引用自己,也会构成引用环:
a = []
a.append(a)
objgraph.show_refs([a], filename=‘a-b.png’)
del 关键字除了可以删除容器中的元素,还可以删除某个引用。
4、垃圾回收
CPython中的内存管理和垃圾回收有两个策略:
-
引用计数
-
分代回收
4.1 引用计数
CPython中主要的垃圾收集机制是通过引用计数,且引用计数无法被禁用,而后面谈到的分代回收策略则可以禁止。
原理上,Python的某个对象的引用计数变为0时,就要成为被回收的垃圾了。例如:
最后
Python崛起并且风靡,因为优点多、应用领域广、被大牛们认可。学习 Python 门槛很低,但它的晋级路线很多,通过它你能进入机器学习、数据挖掘、大数据,CS等更加高级的领域。Python可以做网络应用,可以做科学计算,数据分析,可以做网络爬虫,可以做机器学习、自然语言处理、可以写游戏、可以做桌面应用…Python可以做的很多,你需要学好基础,再选择明确的方向。这里给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
👉Python所有方向的学习路线👈
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
👉Python必备开发工具👈
工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。
👉Python全套学习视频👈
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。
👉实战案例👈
学python就与学数学一样,是不能只看书不做题的,直接看步骤和答案会让人误以为自己全都掌握了,但是碰到生题的时候还是会一筹莫展。
因此在学习python的过程中一定要记得多动手写代码,教程只需要看一两遍即可。
👉大厂面试真题👈
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!