(*args)
return _deep_merge(deep_merge(*lst), last)
>>> dbt.utils.deep_merge({'a': 1, 'b': 2, 'c': 3}, {'a': 2}, {'a': 3, 'b': 1})  # noqa
    {'a': 3, 'b': 1, 'c': 3}
>>> dbt.utils.deep_merge({'a': 1, 'b': 2, 'c': 3}, {'a': 2}, {'a': 3, 'b': 1})  # noqa
    {'a': 3, 'b': 1, 'c': 3}
>>> dbt . utils . deep_merge ( { a : 1 b : 2 c : 3 } { a : 2 } { a : 3 b : 1 } ) # noqa { a : 3 b : 1 c : 3 }
def deep_merge(*args):
    """
    >>> dbt.utils.deep_merge({'a': 1, 'b': 2, 'c': 3}, {'a': 2}, {'a': 3, 'b': 1})  # noqa
    {'a': 3, 'b': 1, 'c': 3}
    """
    if len(args) == 0:
        return None

    if len(args) == 1:
        return copy.deepcopy(args[0])

    lst = list(args)
    last = copy.deepcopy(lst.pop(len(lst) - 1))

    return _deep_merge(deep_merge(*lst), last)
def deep_merge ( * args ) : if len ( args ) == 0 : return None if len ( args ) == 1 : return copy . deepcopy ( args [ 0 ] ) lst = list ( args ) last = copy . deepcopy ( lst . pop ( len ( lst ) - 1 ) ) return _deep_merge ( deep_merge ( * lst ) , last )