内存管理
python中万物皆对象,python的存储问题是对象的存储问题,并且对于每个对象,python会分配一块内存空间去存储它
Python的内存管理机制:引入计数、垃圾回收、内存池机制
一、引用计数
在Python中,每个对象都有指向该对象的引用总数---引用计数
查看对象的引用计数:sys.getrefcount()
引用计数增加:
- 对象被创建 n = 1
- 另外的别人(另一个对象)被创建 m = n
- 作为容器对象的一个元素 a = {1}
- 作为参数传递给函数:foo(x)
引用计数减少:
- 对象的别名被显式的销毁 del n
- 对象的一个别名被赋值给其他对象 n = 2
- 对象从一个窗口对象中移除,或,窗口对象本身被销毁 a.remove(1)
二、垃圾回收
当Python中的对象越来越多,占据越来越大的内存,启动垃圾回收(garbage collection),将没用的对象清除。
当Python的某个对象的引用计数降为0时,说明没有任何引用指向该对象,该对象就成为要被回收的垃圾。
- 垃圾回收时,Python不能进行其它的任务,频繁的垃圾回收将大大降低Python的工作效率;
- Python只会在特定条件下,自动启动垃圾回收(垃圾对象少就没必要回收)
- 当Python运行时,会记录其中分配对象(object allocation)和取消分配对