python系列教程74

Posted 人工智能AI技术

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python系列教程74相关的知识,希望对你有一定的参考价值。

朋友们,如需转载请标明出处:https://blog.csdn.net/jiangjunshow

声明:在人工智能技术教学期间,不少学生向我提一些python相关的问题,所以为了让同学们掌握更多扩展知识更好地理解AI技术,我让助理负责分享这套python系列教程,希望能帮到大家!由于这套python教程不是由我所写,所以不如我的AI技术教学风趣幽默,学起来比较枯燥;但它的知识点还是讲到位的了,也值得阅读!PS:看不懂本篇文章的同学请先看前面的文章,循序渐进每天学一点就不会觉得难了!

在上一篇文章的例子中,我们把不同类型的对象赋值给了变量a。但是当重新给变量a赋值时,它前一个引用值发生了什么变化?例如,在下边的语句中,对象3发生了什么变化?

>>> a = 3

>>> a = 'spam'

答案是,在Python中,每当一个变量名被赋予了一个新的对象,之前的那个对象占用的空间就会被回收(如果它没有被其他的变量名或对象所引用的话)。这种自动回收对象空间的技术叫做垃圾收集。

为了讲清楚,考虑下面的例子,其中每个语句,把不同的对象赋值给了变量名x:

>>> x = 42

>>> x = 'shrubbery'   # Reclaim 42 now (unless referenced elsewhere)

>>> x = 3.1415        # Reclaim 'shrubbery' now

>>> x = [1,2,3]     # Reclaim 3.1415 now

每个对象的引用值在此过程中逐个被丢弃。每一次x被赋值给一个新的对象,Python都回收了旧对象的空间。例如,当它赋值为字符串’shrubbery’时,对象42马上被回收了:对象的空间自动放入自由内存空间池。

在内部,Python是这样来实现这一功能的:它在每个对象中保持了一个计数器,计数器记录了当前指向该对象的引用的数目。一旦这个计数器被设置为零,这个对象的内存空间就会被自动回收。在前面的介绍中,每次x都被赋值给了一个新的对象,而前一个对象的引用计数器变为了零,所以导致了它的空间被回收。

垃圾收集最直接的、可感受到的好处就是,这意味着可以在脚本中任意使用对象而不需要考虑释放内存空间。在程序运行时,Python将会清理那些不再使用的空间。与C和C++这样的底层语言相比,省去了大量的基础代码。

注意:从技术上讲,Python的垃圾收集主要基于引用计数器,正如前面所介绍的。然而,它也有一部分功能可以及时地检测并回收带有循环引用的对象。如果你确保自己的代码没有产生循环引用,可以关闭这部分功能,但该功能是默认可用的。

由于引用实现为指针,一个对象有可能会引用自身,或者引用另一个引用了自身的对象。例如,把一个列表的引用嵌入其自身中,从而创建一个循环。对来自用户定义的类的对象的属性赋值的时候,会产生同样的现象。尽管相对很少,由于这样的对象的引用计数器不会清除为0,必须特别对待它们。

要了解Python的循环检测器的更多细节,参见Python库手册中gc模块的文档。还要注意,这里对于Python的垃圾收集器的介绍只适用于标准的Cpython、Jython和IronPython。

我的微信公众号是“人工智能知识分享”

在这里插入图片描述

以上是关于python系列教程74的主要内容,如果未能解决你的问题,请参考以下文章

最全最详细publiccms常用的代码片段

最全最详细publiccms其他常用代码片段(内容站点)

Go 系列教程 —— 17. 方法

Azure 机器人微软Azure Bot 编辑器系列 : 机器人/用户提问回答模式,机器人从API获取响应并组织答案 (The Bot Framework Composer tutorial(代码片段

python系列教程144——跨行代码

超简单的Python教程系列——第18篇:调试