<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def copy(self):
 """ Returns a copy of this Markov Model. Returns ------- MarkovModel: Copy of this Markov model. Examples ------- [(('a', 'b'), ('b', 'c'))] [('a', 'b'), ('b', 'c')] [] """

        clone_graph = MarkovModel(self.edges())
        clone_graph.add_nodes_from(self.nodes())

        if self.factors:
            factors_copy = [factor.copy() for factor in self.factors]
            clone_graph.add_factors(*factors_copy)

        return clone_graph