<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 the dynamic bayesian network. Returns ------- DynamicBayesianNetwork: copy of the dynamic bayesian network Examples -------- [0.4,0.25,0.8,0.03], [0.3,0.7,0.02,0.2]], [('I', 0),('D', 0)],[2,2]) ['Z', 'G', 'I', 'D'] [(('I', 1), ('G', 1)), (('I', 0), ('I', 1)), (('I', 0), ('G', 0)), (('D', 1), ('G', 1)), (('D', 0), ('G', 0)), (('D', 0), ('D', 1))] >> dbn_copy.get_cpds() [<TabularCPD representing P(('G', 0):
3 | ('I', 0):
2, ('D', 0):
2) at 0x7f13961a3320>] """

        dbn = DynamicBayesianNetwork()
        dbn.add_nodes_from(self._nodes())
        dbn.add_edges_from(self.edges())
        cpd_copy = [cpd.copy() for cpd in self.get_cpds()]
        dbn.add_cpds(*cpd_copy)
        return dbn