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
广告