docs: def copy(self):
          """
          Returns a copy of Markov Chain Model.
  
          Return Type:
          ------------
          MarkovChain : Copy of MarkovChain.
  
          Examples:
          ---------
          >>> from pgmpy.models import MarkovChain
          >>> from pgmpy.factors.discrete import State
          >>> model = MarkovChain()
          >>> model.add_variables_from(['intel', 'diff'], [3, 2])
          >>> intel_tm = {0: {0: 0.2, 1: 0.4, 2:0.4}, 1: {0: 0, 1: 0.5, 2: 0.5}, 2: {0: 0.3, 1: 0.3, 2: 0.4}}
          >>> model.add_transition_model('intel', intel_tm)
          >>> diff_tm = {0: {0: 0.5, 1: 0.5}, 1: {0: 0.25, 1:0.75}}
          >>> model.add_transition_model('diff', diff_tm)
          >>> model.set_start_state([State('intel', 0), State('diff', 2)])
          >>> model_copy = model.copy()
          >>> model_copy.transition_models
          >>> {'diff': {0: {0: 0.1, 1: 0.5, 2: 0.4}, 1: {0: 0.2, 1: 0.2, 2: 0.6}, 2: {0: 0.7, 1: 0.15, 2: 0.15}},
               'intel': {0: {0: 0.25, 1: 0.75}, 1: {0: 0.5, 1: 0.5}}}
          """
          markovchain_copy = MarkovChain(variables=list(self.cardinalities.keys()),
                                         card=list(self.cardinalities.values()), start_state=self.state)
          if self.transition_models:
              markovchain_copy.transition_models = self.transition_models.copy()
  
          return markovchain_copy