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是已知的。但是,删除object(x)之后,我们将无法再打印它。

因此,从上面我们可以看到垃圾收集是完全自动化的,我们不必为此担心。让我们通过另一个示例来了解上述概念。像上面的代码一样,python中的每个对象都有一个引用计数和一个指向类型的指针。

参考计数更改值取决于我们的使用方式,例如,如果将对象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