pyhton的内存管理机制为引用计数
当python创建对象时,引用计数+1,释放对象时,引用计数-1
在以下状况下引用计数+1
1. x = 1
2. y = x
3.foo(x) 作为函数的参数
4.[1,x,3] 作为容器对象的值时
引用计数-1的情况,内存释放,对象离开其作用域空间
1. foo函数执行完成后
2. del x,显示销毁, del y
3.对象别名被复制给新值 x = 123
4.对象互相引用
pyhton的垃圾回收机制
垃圾回收机制会自动检查引用计数为0的对象,将其从内存中释放,若对象互相引用,垃圾回收机制会触发循环回收器释放内存
python执行时与操作系统沟通时,会开启许多小块状内存(整数,浮点数,list等独立的私有内存池),但这些内存块并不用来存储对象,所以对象没有一级存储池,python会不断地
调用malloc 和 free 进行对象内存释放, 频繁地在操作核心块和用户块间切换,严重影响python性能,为此Python实现了内存引用池机制解决这些问题
python内存引用池
垃圾回收机制,检测到的引用计数为0的对象,不返回给操作系统,而是交给内存池
Python中所有小于256个字节的对象都使用pymalloc实现的分配器,而大的对象则使用系统的 malloc。另外Python对象,如整数,浮点数和List,
都有其独立的私有内存池,对象间不共享他们的内存池。