code: def test_copy(self):
      copy = self._int_float_values.copy()
      for i, c in zip(self._int_float_values, copy):
          self.assertEqual(i, c)
      copy[1] = 2.1
      self.assertNotEqual(copy[1], self._int_float_values[1])
      copy = self._tuple_float_float_values.copy()
      for i, c in zip(self._tuple_float_float_values, copy):
          self.assertEqual(i, c)
      key = TestValues.TestTupleFloatType((3.0, 4.0))
      copy[key] = 2.1
      self.assertNotEqual(
          copy[key], self._tuple_float_float_values[key]
      )
      copy = self._int_array_values.copy()
      for i, c in zip(self._int_array_values, copy):
          self.assertEqual(i, c)
      copy[1] = 2.1
      self.assertNotEqual(copy[1], self._int_array_values[1])
      copy = self._int_tensor_values.copy()
      for i, c in zip(self._int_tensor_values, copy):
          self.assertEqual(i, c)
      copy[1] = 2.1
      self.assertNotEqual(copy[1], self._int_tensor_values[1])
  
imports: import unittest
  from typing import Tuple, Union
  import numpy
  import torch
  from reagent.ope.estimators.types import ActionDistribution, TypeWrapper, Values
label_desc: Use image node_id 5 for calling the TestValues obj's underlying member method code with example usage: obj.test_copy() without return types