1. python的内存管理
- python的内存管理是引用了内存池的管理,采用pymalloc的机制用于对小块内存的申请与管理。
- 内存池的概念是预先在内存中申请一定数量的,大小相等(巨细相等)的内存块供留作备用,当有新的内存申请时,先从内存池分配需求所需内存,当内存池不能满足时,在申请新内存,这样减少了内存碎片,增加了使用效率。
- pymalloc的内存处理机制:分被对应两种,对于小块内存申请(小于256bits时),会在内存池中请求内存空间;当大于256bits,则会直接履行new/malloc的行为来请求内存空间。 关于释放内存方面,当一个目标的引用计数变为0时,python就会调用它的析构函数。在析构时,也采用了内存池机制,从内存池来的内存会被归还到内存池中,以防止频频地释放动作。
2. python下多线程的限制以及多进程中传递参数的方式
- 存在python解释器的GIL全局锁,同一时间只能一个线程执行,是一种并发
- 多进程间同享数据,能够运用 multiprocessing.Value 和 multiprocessing.Array
3. 什么是lambda函数?它有什么好处?
- lambda是一个无名函数。add = lambda x, y : x+y add(5,3) #可以这样使用
- sorted(list1, key=lambda x: abs(x))
- Python中最常见的filter筛选、map小刷子、reduce合并,都可以用lambda
- list(map(lambda x:x*x,range(1,21)))
- list(filter(lambda x:x%2 == 0,range(1,21)))
- reduce(lambda x,y:x+y,range(1,101),10000)
4. 解释一下python的and-or语法
- 类似于C中的三目运算符,bool?a:b. == bool and a or b
- 当a为假时,不能正确输出。所以改为 bool and [a] or [b]
- 由于 [a] 是一个非空列表,它永久不会为假。甚至 a 是 0 或 '' 或其它假值,列表[a]为真,由于它有一个元素。