浅谈Python垃圾回收机制

目前垃圾回收比较通用的解决办法有三种,引用计数,标记清除以及分代回收。 引用计数 引用计数也是一种最直观,最简单的垃圾收集技术。 在 Python 中,大多数对象的生命周期都是通过对象的引用计数来管理的。 其原理非常简单,我们为每个对象维护一个 ref 的字段用来记录对象被引用的次数,每当对象被创建或者被引用时将该对象的引用次数加一,当对象的引用被销毁时该对象的引用次数减一,当对象的引用次数减到零时说明程序中已经没有任何对象持有该对象的引用,换言之就是在以后的程序运行中不会再次使用到该对象了,那么其所占用的空间也就可以被释放了了。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 import os import psutil def print_memory_info(name): """ 内存计算函数 """ pid = os.getpid() p = psutil.Process(pid) info = p.memory_full_info() MB = 1024 * 1024 memory = info.uss / MB print('%s used %d MB' % (name, memory)) def test(): print_memory_info('test start') length = 1000 * 1000 list1 = [i for i in range(length)] print_memory_info('test end') return list1 res = test() print_memory_info("main end") out: test start used 4 MB test end used 23 MB main end used 23 MB 由上述例子:如下情况会存在引用计数加一 ...

2024-07-07 · 10 min · 4744 words · Luenci

list, tuple, dictionary, set的底层细节(python)

list, tuple, dictionary, set的底层细节 列表实现细节 python中的列表的英文名是list,因此很容易和其它语言(C++, Java等)标准库中常见的链表混淆。事实上CPython的列表根本不是列表(可能换成英文理解起来容易些:python中的list不是list)。在CPython中,列表被实现为长度可变的数组。可参考《Python高级编程(第2版)》 ...

5 min · 2360 words · Luenci