class A :
pass
a = A()
a.c = 1
b = copy.deepcopy(a)
boost::python::object b = boost::python::object(a);
boost::python::object b;
b = a;
boost::python::object a;
::PyObject_SetAttrString(a, "c", ::PyObject_GetAttrString(b, "c"));
// 调用Python库copy.deepcopy()来完成深拷贝
// 注意:pyObject必须是能被pickle序列化的类型
boost::python::object CloneBPyObj(const boost::python::object& pyObject)
{
PyGILState_STATE gstate;
gstate = ::PyGILState_Ensure();
// 导入Python脚本
bpy::object pyResult;
PyObject* pModule = nullptr;
pModule = ::PyImport_ImportModule("copy");
if (pModule && ::PyObject_HasAttrString(pModule, "deepcopy"))
前言
class A :
pass
a = A()
a.c = 1
b = copy.deepcopy(a)
方案探索
方案一:copy成员函数
方案二:拷贝构造函数
boost::python::object b = boost::python::object(a);
方案三:新建对象后赋值
boost::python::object b;
b = a;
方案四:重构新对象
boost::python::object a;
::PyObject_SetAttrString(a, "c", ::PyObject_GetAttrString(b, "c"));
方案五:借用boost::python::dict::copy成员函数
方案六:调用python的copy.deepcopy()
// 调用Python库copy.deepcopy()来完成深拷贝
// 注意:pyObject必须是能被pickle序列化的类型
boost::python::object CloneBPyObj(const boost::python::object& pyObject)
{
PyGILState_STATE gstate;
gstate = ::PyGILState_Ensure();
// 导入Python脚本
bpy::object pyResult;
PyObject* pModule = nullptr;
pModule = ::PyImport_ImportModule("copy");
if (pModule && ::PyObject_HasAttrString(pModule, "deepcopy"))