• python源码解剖


    print()本身就是用了多态:不同类型的对象,其实是调用了自身的print()方法

    多态:动物 狗1 = new狗()

    用公共的部分来指定类型,实则是调用各自的属性


    创建对象有两种方式:

    通过C API(存疑惑)

    通过类型对象


    (C语言运行机制)

    python中的类型都是来自对C中相应类型的包装,object是由struct定义的,python本身就是用C写出来的,那C的背后呢


    运行时rumtime就是程序运行的时候
    运行时库就是程序运行的时候所需要依赖的库。

    运行的时候指的是指令加载到内存并由CPU执行的时候。
    C代码编译成可执行文件的时候,指令没有被CPU执行,这个时候算是编译时,就是编译的时候

    硬盘代码-编译-内存-CPU,内存分配就涉及到对象所在的堆和变量所在的栈


    malloc的全称是memory allocation,内存分配


    PyObject

    ob_refcnt

    *ob_type


    PyVarObject

    PyObject_HEAD

    ob_size:元素的个数


    PyIntObject

    PyObject_HEAD

    ob_ival:存放‘值’信息,如int类型的5,string类型的‘python’等


    PyStringObject

    PyVarObject_HEAD

    ob_shash:保存string对象的hash值

    ob_sstate:标记了这个string对象是否经过了intern机制的处理

    ob_sval:指向大小为ob_size+1的内存(+1是因为‘’),ob_sval[ob_size]==’‘


    PyListObject

    PyVarObject_HEAD

    ob_item:指向元素内存的指针(因为列表对象分为两部分:一部分是对象本身所在的内存,另一部分是列表元素所在的内存,这两块内存是分离的,所以需要在对象本身中的ob_item来指向元素所在的内存,来将对象与数据联系起来)

    allocated:为PyListObject申请的一块内存的总大小

    (比如为新的PyListObject申请了能放10个元素的内存,已经放了5个,那么allocated为10,ob_size为5)

  • 相关阅读:
    图片无缝横向滚动
    MySQL命令小结
    Git初级
    VS2012 创建的entityframework 4.1版本
    IE10 下系统出现Unable to get property 'PageRequestManager' of undefined or null reference错误
    MIME Types
    不兼容的数据类型
    使用Lambda .map函数将入参List转换至其它List
    MySQL中那种数据类型是只有true和false的
    ELK Stack
  • 原文地址:https://www.cnblogs.com/justaman/p/10409911.html
Copyright © 2020-2023  润新知