15-内存管理

2020-05-15  本文已影响0人  痞子_4ae7

元类

类装饰器

class Test(object):
    def __init__(self,func):
        print("--初始化--")
        print("func name is %s"%func.__name__)
        self.__func = func
    # 重写该方法后,对象可以直接进行调用
    def __call__(self):
        print("--装饰器中的功能--")
        self.__func()
# @Test 等价于  test = Test(test) 装饰器特性
@Test
def test():
    print('--test 函数---')
# 本身test指向函数test,但是装饰器将test指向了对象。
#  对象本身不可以被调用,但是重写__call__方法之后则会被调用
test()
执行结果:
--初始化--
func name is test
--装饰器中的功能--
--test 函数---

对象池

什么叫做垃圾回收?
生活案例

垃圾收集

概述:
现在的高级语言如java,c#等,都采用了垃圾收集机制,
而不再是c,c++里用户自己管理维护内存的方式。自己管理内存极其自由,
可以任意申请内存,但如同一把双刃剑,为大量内存泄露,悬空指针等bug埋下隐患。
python里也同java一样采用了垃圾收集机制,不过不一样的是:
python采用的是引用计数机制为主,标记-清除和分代收集两种机制为辅的策略
python里每一个东西都是对象,它们的核心就是一个结构体:PyObject
 typedef struct_object {
        int ob_refcnt;
        struct_typeobject *ob_type;
    } PyObject;
PyObject是每个对象必有的内容,其中ob_refcnt就是做为引用计数。
当一个对象有新的引用时,它   的ob_refcnt就会增加,当引用它的
对象被删除,它的ob_refcnt就会减少
#define Py_INCREF(op)   ((op)->ob_refcnt++) //增加计数
    #define Py_DECREF(op) \ //减少计数
        if (--(op)->ob_refcnt != 0) \
            ; \
     else \
            __Py_Dealloc((PyObject *)(op))
当引用计数为0时,该对象生命就结束了。

内建属性

内建函数

集合

常用模块

上一篇 下一篇

猜你喜欢

热点阅读