code: def DiffAnyObjects(self, oldObj, newObj, isObjLink=False):
        
        if oldObj == newObj:
           return True
        if not oldObj or not newObj:
           __Log__.debug('DiffAnyObjects: One of the objects is unset.')
           return self._looseMatch
        oldObjInstance = oldObj
        newObjInstance = newObj
        if isinstance(oldObj, list):
           oldObjInstance = oldObj[0]
        if isinstance(newObj, list):
           newObjInstance = newObj[0]
        # Need to see if it is a primitive type first since type information
        #   will not be available for them.
        if (IsPrimitiveType(oldObj) and IsPrimitiveType(newObj)
           and oldObj.__class__.__name__ == newObj.__class__.__name__):
           if oldObj == newObj:
              return True
           elif oldObj == None or newObj == None:
              __Log__.debug('DiffAnyObjects: One of the objects in None')
           return False
        oldType = Type(oldObjInstance)
        newType = Type(newObjInstance)
        if oldType != newType:
           __Log__.debug('DiffAnyObjects: Types do not match %s != %s' %
              (repr(GetWsdlName(oldObjInstance.__class__)),
               repr(GetWsdlName(newObjInstance.__class__))))
           return False
        elif isinstance(oldObj, list):
           return self.DiffArrayObjects(oldObj, newObj, isObjLink)
        elif isinstance(oldObjInstance, types.ManagedObject):
           return (not oldObj and not newObj) or (oldObj and newObj
              and oldObj._moId == newObj._moId)
        elif isinstance(oldObjInstance, types.DataObject):
           if isObjLink:
              bMatch = oldObj.GetKey() == newObj.GetKey()
              LogIf(not bMatch, 'DiffAnyObjects: Keys do not match %s != %s'
                 % (oldObj.GetKey(), newObj.GetKey()))
              return bMatch
           return self.DiffDataObjects(oldObj, newObj)
  
        else:
           raise TypeError("Unknown type: "+repr(GetWsdlName(oldObj.__class__)))
docs: Diff any two Objects