zoukankan      html  css  js  c++  java
  • 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)

  • 相关阅读:
    构造函数模式知识的扩展
    JavaScript 创建对象之单例、工厂、构造函数模式
    javaScript 计算两个日期的天数相差
    类似购物车循环判断方法
    spring的@Transactional注解详细用法
    String.getBytes()方法中的中文编码问题(转)
    spring 定时任务的 执行时间设置规则-----看完这篇就懂了
    为什么说Redis是单线程的?
    你应该知道的 RPC 原理
    关系型数据库与NoSQL的对比
  • 原文地址:https://www.cnblogs.com/justaman/p/10409911.html
Copyright © 2011-2022 走看看