Python 是如何进行内存管理的
答:从三个方面来说,一对象的引用计数机制,二垃圾回收机制,三内存池机制一、对象的引用计数机制Python 内部使用引用计数,来保持追踪内存中的对象,所有对象都有引用计数
引用计数增长的情况:1,一个对象分派一个新名称2,将其放入一个容器中(如列表、元组或字典)引用计数减少的情况:1,使用 del 语句对对象别名显示的销毁2,引用超过作用域或被重新赋值sys
getrefcount( )函数可以获得对象的当前引用计数多数情况下,引用计数比你猜想得要大得多
对于不可变数据(如数字和字符串),解释器会在程序的不同部分共享内存,以便节约内存
二、垃圾回收1,当一个对象的引用计数归零时,它将被垃圾收集机制解决掉
2,当两个对象 a 和 b 互相引用时,del 语句可以减少 a 和 b 的引用计数,并销毁用于引用底层对象的名称
然而由于每个对象都包含一个对其他对象的应用,因此引用计数不会归零,对象也不会销毁
(从而导致内存泄露)
为解决这一问题,解释器会定期执行一个循环检测器,搜索不可访问对象的循环并删除它们
三、内存池机制Python 提供了对内存的垃圾收集机制,但是它将不用的内存放到内存池而不是返回给操作系统
1,Pymalloc 机制
为了加速 Python 的执行效率,Python 引入了一个内存池机制,用于管理对小块内存的申请和释放
2,Python 中所有小于 256 个字节的对象都使用 pymalloc 实现的分派器,而大的对象则使用系统的 malloc
3,对于 Python 对象,如整数,浮点数和 List,都有其独立的私有内存池,对象间不共享他们的内存池
也就是说假如你分派又释放了大量的整数,用于缓存这些整数的内存就不能再分派给浮点数
什么是 lambda 函数
它有什么好处
答:lambda 表达式,通常是在需要一个函数