Python 内存管理之垃圾回收

云栖号资讯:【点击查看更多行业资讯】
在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来!


如果您已经编码过一段时间,那么您可能听说过垃圾r = ^ s ] $收。l D B在本文中,我们将更深入地研究它的功能和原理。

What/ R @ m f T o N 和 Why

在现实世界中,我们会清理掉一些东西 —— 例如旧笔记,不再需要的盒子 —— 将它们丢弃在垃圾桶或者回收箱中。因为存储的空间有限,所以我们要为其它重q r o H z Z要的$ s P物品腾出存储空间。

同样地,在计算机中,空间 —— 也称为* { i % V K } U .内存是重要且有限的资源。因此G b a,垃圾回收器会收集不再需要的数据对象并将其丢弃。

垃圾回收可以是自动的也可以是手动的,它取决于不同的编程语言。在大多数高级语言(例如 Python 和 Java)7 S v u F A 2 /中,它是自动的。因此,这| , t 2 W - t f ^些语言称为垃圾回收语言。其它语言(例如 C)不支持自动垃圾回收,程序员负责内存K O D i E I 4 X y管理。

下面我们来看看垃圾回收的原理。

HowP H _ 5

垃圾回收原理中有一些不同的技术,但大多数垃圾回收语言(包括 Python)都使用引用计数。在引用计数中,我们记录对象的引用数,并在计数为 0 时丢弃对象。

对象的引用计数随着指向该对象的别名数量的变化而变化。给对象分配新名称或将其放置在列表R L a v E或字典等容器中时,引用计数会增加。当使用 del 命令删除对象,引用超出范围或重新分配对象时,计数会减少。例如:

Python 内存管理之垃圾回收

当引用计数下降到 0 时,^ % U对象会被立即回收。但是这样做有一个代价:我们需要S ! - A R 5 U P ~为每个对象存储一个附加的整数值,I C U / ~ n以指示其引用计数(空间与时_ G U P T 5 E间的权衡)。

但是,引用) * P { ~计数系统中存在 循环引用 的问题。如果两个对象 A 和 B 互相引用,则它们的引用计数将会始终大于或等于 1。这e 0 V + ,种情况在列表、类和函数中很常见。例如,当对象引用自身时:

Python 内存管理之垃圾回收

或者当对象相互引用时:

Python 内存管理之垃圾回收

垃圾回收器会定期找出循环引用并将& e # # 8其删除。这个过程会耗费昂贵的资源,所以它是定期执行的并且是可计划的。Python 中的垃圾回收器接口提7 V X t $ w ; T供了一些方法,您可以用它们来探索执行垃圾回收的计划和阈值。

【云栖号在线课堂】每天都有产品技术专家分享!l % q c A e y 7
课程地址:https://yqh.aliyun.com/live( D z 3 r | / ] P

立即加入社群,与专家面对面,及时了解课程最新动态!
【云栖号在线课堂 社群】https://c.tb.cn/F3.Z8gvnK

原文发布时间:2020-05-27
本文作者:CodingSuccess
本文来自:“掘金”,了解相关信息可以关注“掘金x q t e