python 内存管理
python的内存管理 计数器 垃圾回收机制 垃圾回收:引用计数为主,标记清除和分带回收为辅 开启一个新的对象会存放到双端链表中 通过引用计数来决定是不是垃圾,但是会有循环引用的问题 为了解决循环引用,使用了标记清除,标记清除就是将循环引用的内容引用计数自动减一 为了解决多次扫描一个双端链表,使用了分袋回收,一共3个袋,0袋,1袋,2袋 当0袋的总长度>=700时扫描一下0袋,当0袋扫描10次后扫描一次1袋,扫描10次后计数仍大于等于1的进入1袋 当1袋扫描10次后扫描一次2袋,1袋扫描10次后计数仍大于等于1的进入2袋 内存池 a = 3.14 del a print(id(a)) b = 2.7 print(id(b)) #a和b的内存地址一样,因为有内存池的存在,浮点数和列表会使用和之前创建的对象同一内存地址 如何避免哈希冲突 可哈希? 如果一个对象在其生命周期内,其哈希值(可以通过python的内置函数hash获得)从未改变(这需要一个__hash__()方法),并且可以与其他对象进行比较(这需要一个__eq__()或__cmp__()方法),那么这个对象就是可哈希的。哈希对象的相等意味着其哈希值的相等。 哈希性使得对象可以用作dictionary键和set成员,因为这些数据结构在内部使用了哈希值。 Python的所有不可变的内置对象都是可hashable的,但可变容器