docs: def copy(self):
          """
          Return a copy of the distribution.
  
          Returns
          -------
          GaussianDistribution: copy of the distribution
  
          Examples
          --------
          >>> import numpy as np
          >>> from pgmpy.factors.distributions import GaussianDistribution as GD
          >>> gauss_dis = GD(variables=['x1', 'x2', 'x3'],
          ...                mean=[1, -3, 4],
          ...                cov=[[4, 2, -2],
          ...                     [2, 5, -5],
          ...                     [-2, -5, 8]])
          >>> copy_dis = gauss_dis.copy()
          >>> copy_dis.variables
          ['x1', 'x2', 'x3']
          >>> copy_dis.mean
          array([[ 1],
                  [-3],
                  [ 4]])
          >>> copy_dis.covariance
          array([[ 4,  2, -2],
                  [ 2,  5, -5],
                  [-2, -5,  8]])
          >>> copy_dis.precision_matrix
          array([[ 0.3125    , -0.125     ,  0.        ],
                  [-0.125     ,  0.58333333,  0.33333333],
                  [ 0.        ,  0.33333333,  0.33333333]])
          """
          copy_distribution = GaussianDistribution(variables=self.variables,
                                                   mean=self.mean.copy(),
                                                   cov=self.covariance.copy())
          if self._precision_matrix is not None:
              copy_distribution._precision_matrix = self._precision_matrix.copy()
  
          return copy_distribution