def diff(a, b):
    """Get a diff -object of 'a' to 'b'

        Given, the a and b..
        a = { "id": 1, name:"My name", args: [ 1, 2 ] }
        b = { "id": 2, name:"Your name", args: [ 2, 3 ] }

        .. the diff is:
        diff(a, b) = {
          "name": [ "My Name", "Your name" ],
          "args": [ [ 1, 2 ], [ 2, 3 ] ]
        }

        If the two objects have no difference, then an empty
        object "{}" will be returned.
    """
    def diff_value(value_a, value_b):
        if (value_a == value_b):
            return None
        if (value_a == None or value_b == None):
            return [value_a, value_b]
        if (isinstance(value_a, dict)):
            return diff_dict(value_a, value_b)
        return [value_a, value_b]
        
    def diff_dict(dict_a, dict_b):
        d = {}
        for key,val in dict_a.items():
            c = diff(val, dict_b[key])
            if (c != None):
                d[key] = c
        return d

    if (isinstance(a, dict)):
        return diff_dict(a, b)

    return diff_value(a, b)