The second one calls the superclass' constructor with arguments.
Some demonstration:
>>> class Base(object):
... def __init__(self, arg1, arg2, karg1=None, karg2=None):
... print arg1, arg2, karg1, karg2
...
>>> b = Base(1, 2, karg2='a')
1 2 None a
>>> class Derived(Base):
... def __init__(self, *args, **kwargs):
... super(Derived, self).__init__(*args, **kwargs)
...
>>> d = Derived(1, 2, karg1='Hello, world!')
1 2 Hello, world! None
>>> class Derived2(Base):
... def __init__(self):
... super(Derived2, self).__init__() # this will fail because Base.__init__ does not have a no-argument signature
...
>>> d2 = Derived2()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in __init__
TypeError: __init__() takes at least 3 arguments (1 given)