Python面试题集
1、Python是如何进行内存管理的?
一般的高级语言都有内存管理,垃圾回收的机制。这种垃圾回收机制一般都不会只采用一种方式实现,为了最效率的进行垃圾回收,一般采用一种为主,多种方式混合的内存管理方式。
1、python引入计数器的机制进行内存管理。
对象创建时创建一个引用计数,当这个引用计数为0时,对象被回收。
计数器顾名思义,就是标志python对象被引用的次数。
在这里涉及到面向对象的概念,有句话叫做python的一切都是对象,
在赋值语句中 a = 0,其中的0代表是一个值为0的、占据内存的对象,a是这个对象的别名;
计数器的值增加的情况包括:
a.创建对象,例如 a=0
b.其他创建的对象被指向了已经创建的对象,例如 b=a
c.方法的参数
d.容器对象的元素
计数器减少的情况包括:
a.对象别名被赋予其他对象,例如 a=1
b.对象别名被销毁,例如 del a
c.引用离开作用域,如方法结束,方法中的引用减少
d.对象从容器中移除,或者容器被销毁
2、python引入内存池机制
预先申请一定数量内存留作备用,当对象被创建时,优先从内存池中分配内存。不够了在申请新的内存。
从而减少内存碎片,提升效率。
3、垃圾回收
垃圾回收器定按照一定的算法,去检索引用计数为0的对象,并清除其内存空间。
当两个对象互相引用而没有其他引用时,也会被垃圾回收器释放。
2、什么是lambda函数?它有什么好处?
lambda函数也叫匿名函数,也就是说没有函数名。
举一个简单例子,在申请加入某python的QQ群时,申请的条件是写出一个匿名求和公式
答案是:f = lambda x, y : x + y
在这个语句中,冒号前是参数,多个参数由逗号间隔;冒号后是表达式。
个人理解lamdba函数的好处主要有两点:
1.精简代码,省去定义函数的过程。
2.对于一些不会复用,不好起名字的函数,使用lamdba函数比较方便。
缺点是略复杂时会降低代码可读性。