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