I have a simple C++ object, exposed to python with Boost.python, like this : ------------------------------------------------- BOOST_PYTHON_MODULE(MyModule) { class_<MyObject>("MyObject")... } ------------------------------------------------- I call then python, making an instance of MyObject accessible : ------------------------------------------------- MyObject anInstance; object main_module((handle<>( borrowed( PyImport_AddModule ( "__main__" ) ) ) ) ); object main_namespace = main_module.attr( "__dict__" ); object myModule( (handle<>(PyImport_ImportModule("MyModule"))) ); main_namespace["anInstance"] = ptr(&anInstance); try { handle<> ignored(( PyRun_String( "anInstance.aNewMember = 1;print anInstance.aNewMember;", Py_file_input, main_namespace.ptr(), main_namespace.ptr() ) ) ); } catch ( error_already_set ) { PyErr_Print(); } ------------------------------------------------- You can observe that I've added a member ( aNewMember ) to MyObject instance. But if I make a copy of my object : ------------------------------------------------- MyObject anotherInstance = anInstance; main_namespace["anotherInstance"] = ptr(&anotherInstance); try { handle<> ignored(( PyRun_String( "print anotherInstance.aNewMember;", Py_file_input, main_namespace.ptr(), main_namespace.ptr() ) ) ); } catch ( error_already_set ) { PyErr_Print(); } ------------------------------------------------- I have a error saying that MyObject hasn't any "aNewMember" member. What I have added with python has not been copied/transfered. Is there a workaround to add permanently some new members to wrapped objects ?