code: def identical(self, reference, b):
      if type(reference) in [int, long]:
          self.assertIn(type(b), [int, long])
      else:
          self.assertEqual(type(reference), type(b))
      if isinstance(reference, list):
          self.assertEqual(len(reference), len(b))
          for i in range(len(reference)):
              self.identical(reference[i], b[i])
      if isinstance(reference, dict):
          self.assertEqual(sorted(reference.keys()), sorted(b.keys()))
          for i in reference:
              self.identical(reference[i], b[i])
      if isinstance(reference, SArray):
          self.identical(list(reference), list(b))
      if isinstance(reference, SFrame):
          self.identical(list(reference), list(b))
  
file_path: turicreate/src/python/turicreate/test/test_extensions.py
imports: from __future__ import print_function
  from __future__ import division
  from __future__ import absolute_import
  import unittest
  from ..data_structures.sarray import SArray
  from ..data_structures.sframe import SFrame
  import sys
  import random
  from .._cython.cy_variant import _debug_is_flexible_type_encoded
  import pytest
label_desc: Use image node_id 1 for calling the VariantCheckTest obj's underlying member method code with example usage: obj.identical(reference, b) without return types