Your task is to write a function that takes two or more objects and returns a new object which combines all the input objects. 

All input object properties will have only numeric values. Objects are combined together so that the values of matching keys are added together.

An example:

```python
objA = { 'a': 10, 'b': 20, 'c': 30 }
objB = { 'a': 3, 'c': 6, 'd': 3 }
combine(objA, objB) # Returns { a: 13, b: 20, c: 36, d: 3 }
```

The combine function should be a good citizen, so should not mutate the input objects.

Difficulty: introductory

Starter code:

def combine(*args):
	

Solutions:
def combine(*bs):
    c = {}
    for b in bs:
        for k, v in list(b.items()):
            c[k] = v + c.get(k, 0)
    return c


from collections import Counter


def combine(*args):
    return sum((Counter(a) for a in args), Counter())


def combine(*dictionaries):
    result = {}
    for dict in dictionaries:
        for key, value in list(dict.items()):
            result[key] = value + result.get(key, 0)
    return result


from collections import defaultdict
def combine(*dicts):
    ret = defaultdict(int)
    for d in dicts:
        for k, v in d.items():
            ret[k] += v
    return dict(ret)

from collections import Counter

def combine(*args):
    return sum(map(Counter, args), Counter())

def combine(*args):
    rez = {}
    
    for i in args:
        for k, v in i.items():
            rez[k] = rez.get(k, 0) + v
    
    return rez

def combine(*args):
    result = {}
    for obj in args:
        for key, value in obj.items():
            if not key in result:
                result[key] = 0
            result[key] += value
    return result

def combine(*args):
    ret = {}
    for arg in args:
        for k, v in arg.items():
            ret.setdefault(k, 0)
            ret[k] = ret[k] + v
    return ret


def combine(*args):
    keys = set([y for x in args for y in list(x.keys())])
    return {k:sum([a.get(k,0) for a in args]) for k in keys}