Python C API 引用计数器(三)

简介

Python的内存管理是通过对象的引用计数器来实现的,对象的创建会将引用计数器加1,被引用一次则引用计数器就会加1,反之解除引用时,则引用计数器就会减1,当Python对象的引用计数器为0的时候,则这个对象就会被回收和释放。

这种内存管理的方式是有一定的弊端的,一是它需要额外的空间维护引用计数,二是它不能解决对象的“循环引用”的问题,因此,也有很多语言比如Java并没有采用该算法做来垃圾的回收机制。

Python代码实例

Python C API中管理及释放Python对象

void Py_INCREF(PyObject *o) Python对象引用计数器加1,该对象不能为NULL,否则会报错

void Py_XINCREF(PyObject *o) Python对象引用计数器加1,该对象可以为NULL,但是引用计数器未生效

void Py_DECREF(PyObject *o) Python对象的引用计数器减1,该对象不能为NULL,否则会报错

void Py_XDECREF(PyObject *o) Python对象引用计数器减1,该对象可以为NULL,但是引用计数器未生效

void Py_CLEAR(PyObject *o) 直接将Python应用计数器清0

C代码实例

头文件

源文件

main.cpp

初始化Python脚本路径

Python虚拟机在运行的时候,import一个模块的时候,如果这个模块没有被加载过,则Python虚拟机就会在执行程序的所在路径搜索这个脚本,如果找到脚本文件就将它加载,如果没有找到,就会从sys.path中的所有路径去搜索,如果找到脚本文件就加载,反之则报错。

Python下的sys.path

打印所有的sys.path下的路径

将当前路径加入到sys.path

C/C++初始化Python脚本路径

头文件

源文件

本文为原创文章,未经授权禁止转载本站文章。
原文出处:兰玉磊的个人博客
原文链接:https://www.fdevops.com/2020/03/08/python-c-api-3
版权:本文采用「署名-非商业性使用-相同方式共享 4.0 国际」知识共享许可协议进行许可。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注