diff --git a/modules/mol/base/pymod/export_residue.cc b/modules/mol/base/pymod/export_residue.cc
index 9016f9d02f209c2e3ac339be7cec631099af4b96..7a0883e7fc30d8a938e821a2bf7fbe93a3a762b8 100644
--- a/modules/mol/base/pymod/export_residue.cc
+++ b/modules/mol/base/pymod/export_residue.cc
@@ -71,6 +71,19 @@ namespace {
     }
     b->SetChemClass(ChemClass(st[0]));
   }
+
+  struct H {
+    std::size_t operator()(const ost::mol::ResNum& n) const {
+        std::size_t h1 = std::hash<int>{}(n.GetNum());
+        std::size_t h2 = std::hash<char>{}(n.GetInsCode());
+        return h1 ^ (h2 << 1);
+    }
+  };
+
+  int ResNumHash(const ost::mol::ResNum& n) {
+    return H{}(n);
+  }
+
 }
 
 void export_Residue()
@@ -118,6 +131,7 @@ void export_Residue()
     .add_property("ins_code", &ResNum::GetInsCode)
     .def("__str__", &ResNum::AsString)
     .def("__repr__", &ResNum::AsString)
+    .def("__hash__", &ResNumHash)
     .def(self<self)
     .def(self>self)
     .def(self>=self)