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)