#include #include #include class Bar { public: Bar(int x) : x(x) {} int get_x() const { return x; } void set_x(int x) { this->x = x; } private: int x; }; class Foo { public: Foo(int x) : b(x) {} // Returns an internal reference Bar const& get_bar() const { return b; } private: Bar b; }; using namespace boost::python; BOOST_PYTHON_MODULE(internal_refs) { class_("Bar", init()) .def("get_x", &Bar::get_x) .def("set_x", &Bar::set_x) ; class_("Foo", init()) .def("get_bar", &Foo::get_bar , return_internal_reference<>()) ; } //>>> from internal_refs import * //>>> f = Foo(3) //>>> b1 = f.get_bar() //>>> b2 = f.get_bar() //>>> b1.get_x() //3 //>>> b2.get_x() //3 //>>> b1.set_x(42) //>>> b2.get_x() //42