Python 爬阶梯 | Python 那些永远用不到的对象,我们称之为「垃圾」

今天咱们来 「Python 爬阶梯」,我们知道使用 Python 可以创建对象,当我们去引用它的时候,系统会开辟一个内存空间存放对象,不过可能有些对象我们用完之后,永远再也不会去使用了,那这对象不能一直留在内存里边吧,对象已经废了,也就成为了「垃圾」,垃圾要清理掉,内存才能腾出位置给别的程序使用。

那么:

Python是怎么回收垃圾的?

先来了解一下「引用次数」

在 Python 的内置模块 sys 有一个 getrefcount 方法,通过它,我们可以得到对象被引用的次数:

比如我们定义这样一个「s」:

import sys

s = [1, 2, 3]
print(sys.getrefcount(s))

-------------------------
2

这里得到的结果为 2 次引用,其中一次是 s,一次是 getrefcount。

接下来我们看看这样的代码:

import sys

def fxxk():
    s = [1, 2, 3]
    print(sys.getrefcount(s))

fxxk()
print(sys.getrefcount(s))

--------------------------

2
Traceback (most recent call last):
  File "main.py", line 8, in <module>
    print(sys.getrefcount(s))
NameError: name 's' is not defined

当我们执行完 fxxk 方法之后,我们无法再去引用对象 s 了,因为它已经被回收。

也就是说,当执行完 fxxk() 之后,对象 s 的引用数量为

本文隐藏内容 登陆 后才可以浏览
这里我们创建了 handsomeb 对象,见一个女生爱一个。。。主要是最后两行代码,当我们使用 del handsomeb 的时候,实际上就是将 handsombe 这个对象给删除释放掉,不过这个时候还存在那些和 handsomeb 的关联对象 Girl 们,她们已经没有什么用了,我们可以使用 gc.collect(),将和 handsomeb 关联的对象们都给释放掉。

ok,以上就是小帅b今天给你带来的分享,关于 Python 的垃圾回收问题,面试也常常会被问到,希望对你有帮助,那么我们下回见!

发表回复