一行代码实现删除列表中重复的值 ?
a = [1,2,3,5,6,9,8,2,4,5,2,3] b = {} b = b.fromkeys(a) c = list(b.keys())
print('去重后为:',c)
Python是如何进行内存管理的? Python的程序会内存泄漏吗?说说有没有什么方面阻止或检测内存泄漏
Python是如何进行内存管理的:1>引用计数:每个对象中都有ob-refcnt来做引用计数,当一个对象增加,ob-refcnt就会增加;反之减少,从而也释放一定空间;
2>标记清除:解决循环引用的问题。先按需分配,等到没有空闲内存的时候,从寄存器和程序栈上的引用出发,遍历所有对象和引用把所有能访问的打标记,最后将没有标记的对象释放掉;
3>分代技术:提高效率,提高垃圾回收的效率,按照存活时间,分成不同的集合。将内存块按照其存活时间划分为不同的集合
Python的程序会内存泄漏吗:Python也会内存泄露,Python本身的垃圾回收机制无法回收重写了del的循环引用的对象;
说说有没有什么方面阻止或检测内存泄漏:1>程序员管理好每个python对象的引用,尽量在不需要使用对象的时候,断开所有引用
2>尽量少通过循环引用组织数据,可以改用weakref做弱引用或者用id之类的句柄访问对象
3>通过gc模块的接口可以检查出每次垃圾回收有哪些对象不能自动处理,再逐个逐个处理
哈希冲突回避算法有哪几种, 分别有什么特点?
开放定址法:就是一旦发生了冲突,就去寻找下一个空的散列地址,只要散列表足够大,空的散列地址总能找到,并将记录存入 ,公式为:fi(key) = (f(key)+di) MOD m (di=1,2,3,……,m-1) ;
再哈希法:有多个不同的Hash函数,当发生冲突时,使用第二个,第三个,….,等哈希函数计算地址,直到无冲突。虽然不易发生聚集,但是增加了计算时间;
链地址法:每个哈希表节点都有一个next指针,多个哈希表节点可以用next指针构成一个单向链表,被分配到同一个索引上的多个节点可以用这个单向 ;
立公共溢出区:这种方法的基本思想是:将哈希表分为基本表和溢出表两部分,凡是和基本表发生冲突的元素,一律填入溢出表。