5.14 每日小三练

一行代码实现删除列表中重复的值 ?

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指针构成一个单向链表,被分配到同一个索引上的多个节点可以用这个单向 ;

立公共溢出区:这种方法的基本思想是:将哈希表分为基本表和溢出表两部分,凡是和基本表发生冲突的元素,一律填入溢出表。

 

posted @ 2020-05-15 00:28  扎小辫的胖虎  阅读(75)  评论(0编辑  收藏  举报