【发布时间】:2011-07-25 12:50:10
【问题描述】:
Boost 文档没有说明这一点。当我使用boost::python::import 时,指定的模块到底导入到了哪里?我的猜测是'__main__'(只是为了确保)。
另外,当模块对象超出范围时会发生什么?鉴于 Boost 文档中的措辞——“返回:一个包含对导入模块的引用的对象实例”——我猜只有引用超出范围,模块对象仍然可以在 '__main__' 中找到(或它所在的任何地方进口)。
【问题讨论】:
Boost 文档没有说明这一点。当我使用boost::python::import 时,指定的模块到底导入到了哪里?我的猜测是'__main__'(只是为了确保)。
另外,当模块对象超出范围时会发生什么?鉴于 Boost 文档中的措辞——“返回:一个包含对导入模块的引用的对象实例”——我猜只有引用超出范围,模块对象仍然可以在 '__main__' 中找到(或它所在的任何地方进口)。
【问题讨论】:
底层机制是PyImport_ImportModule,不,它不涉及__main__。成功导入的模块会插入到sys.modules dict 中,因此当您 DECREF 函数返回的内容时,不会释放该对象 - 至少仍然有一个引用。
【讨论】: