Python 的垃圾回收


Python 的内存管理非常简单。您无需担心内存管理,因为内存分配和释放是自动的。垃圾回收是内存管理机制之一。让我们了解垃圾回收的不同方面:

垃圾回收

这是一个清理共享计算机内存的过程,该内存当前正在被正在运行的程序使用,而该程序不再需要该内存。使用垃圾回收,该释放的内存可以被另一个程序使用。

Python 使用两种方法进行内存管理:

  • 引用计数
  • 垃圾回收

Python 的垃圾回收是自动的,但在某些编程语言中,您必须自己清理对象。在 Python 中,如果需要,您可以手动删除对象。

>>> x = 9
>>> print(x)
9
>>> del x
>>> print(x)
Traceback (most recent call last):
   File "<pyshell#3>", line 1, in <module>
      print(x)
NameError: name 'x' is not defined

在上面,我们简单地定义一个变量 (x) 并使用它。在运行时,我们删除对象(因为 Python 中的一切都是对象)并尝试输出它。

在上述程序的前两行中,对象 x 是已知的。但是,在删除对象 (x) 之后,我们无法再打印它。

因此,从上面我们可以看出,垃圾回收是完全自动化的,我们无需担心它。让我们用另一个例子来理解上述概念。Python 中的每个对象,就像上面的代码一样,对象 x 都有一个引用计数和一个指向类型的指针。

引用计数的值会根据我们的使用方法而变化,例如,如果我们将对象 x 分配给另一个对象 y,则其引用计数将增加到 2。

>>> some_list = [1, 2 ,3, 4, 5, 6, 7, 8, 9]
>>> #Reference count of some_list = 1
>>> other_list = some_list
>>> #Reference count = 2
>>> #This will also increases if we pass the object as an assignment
>>> list_total = sum(some_list)
>>> # If we put the object in a list, reference count will also increase
>>> list_of_list = [some_list, some_list, some_list]
>>>
>>> #Let's check the reference count of object "some_list"
>>> import sys
>>> sys.getrefcount(some_list)
6

上面是一个很好的例子,可以帮助我们理解 Python 中内存管理的引用计数。我们创建一个对象“some_list”(引用计数 = 1),我们将其分配给另一个对象(引用计数 = 2),我们将该对象设置为参数(引用计数 = 3),稍后我们将该对象放入列表中,其中该对象的出现次数为三次(引用计数 = 6)。之后,当我们尝试获取对象“some_list”的引用计数时,我们得到 6。

>>> import sys
>>> sys.getrefcount(some_list)
6
>>>
>>> del list_of_list
>>> sys.getrefcount(some_list)
3
>>> del some_list
>>> sys.getrefcount(some_list)
Traceback (most recent call last):
   File "<pyshell#17>", line 1, in <module>
      sys.getrefcount(some_list)
NameError: name 'some_list' is not defined

更新于:2019年7月30日

883 次浏览

启动您的职业生涯

通过完成课程获得认证

开始学习
广告