python 源码剖析笔记1

对象

python的世界中一切都是对象👀👀

  • 1 对象是数据以及数据的操作,在计算机中就是内存,连续或离散。
  • 2 python中对象就是结构体,type是唯一的被静态初始化的(类型对象)
  • 3 对象的大小是在内存中固定的大小,需要维护的是指向大小不一定内存的指针

在python中所有的东西都是对象对象的核心便是

typedef struct _object{
PyObject _HEAD
}PyObject

typedef struct {
PyObject _VAR_HEAD
}PyVarObject

PyObject _HEAD😯PyObject _VAR_HEAD

这两个结构体分别是代表了不可变长数据对象和可变长数据对象的基石

pyobject_head 定义了每一个python对象必须有的东西

  • 1 _object * _ob_next
  • 2 _object* _ob_prev
  • 3 ob_refcnt:引用机制确定引用的数量为0自动清理内存

pyobject_var_head:

  • 1 包含pyobject_head所有的东西
  • 2 ob_size:元素的个数例如list中的元素个数

类型对象

在申请对象空间的时候我们需要一个大小来确定空间的大小,但是在上面的定义中并没有这样的信息

每一个对象都存在一个类型,类型也是一个对象,那么类型对象的类型是什么?
类型对象的类型是type
PyTypeObject Pytype_Type
类型对象的一个静态初始化的东西,是类型对象的类型,

总结

pyobject:不可变长度的对象的基石
pyvarobject:可变长度的对象的基石

pyobject-->+ob_size-->pyvarobject

类型对象也是一种对象,是基于pyvarobject的对象。那么这个对象分配内存的时候应该怎么分配。

基于pyobject的pytype_type

类型对象的类型是一个固定的内存分配。

py_ob --> py_type_type : static useage

py_var_ob --> py_type = py_type_type + 变量

再说的明白一些:就是所有的东西都是对象由一个很厉害的结构体来作为基本模版
然后为了确定各种操作和占用的内存的大小,加上一个叫做类型的对象,而这种对象也是一种对象需要类型来确定它的占用内存的属性,所以引入类型的类型着一个对象。

引用计数

1.作为python的垃圾回收机制
2.对对象的引用是有数量限制的次数32位整形变量,但是对于类型对象的引用是无限制的
3.对象创建的时候,利用宏来计数引用变成1

python对象的分类

  • 1 math对象:数值对象 integer
  • 2 Container:容纳其他对象的对象 list
  • 3 Composition:表示程序结构的对象 class
  • 4 Internal :python解释器的内部对象 buffer
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容