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的主要内容,如果未能解决你的问题,请参考以下文章
Azure 机器人微软Azure Bot 编辑器系列 : 机器人/用户提问回答模式,机器人从API获取响应并组织答案 (The Bot Framework Composer tutorial(代码片段