The performance increase is when the curried function gets called, not upon creating the curried object.  Maybe this will clarify:
```python
In [1]: from functools import partial

In [2]: def f():
   ...:     pass
   ...: 

In [3]: kwargs = {}

In [4]: f1 = partial(f, **kwargs)

In [5]: f2 = partial(f)

In [6]: f1.keywords
Out[6]: {}

In [7]: f2.keywords

In [8]: f2.keywords is None
Out[8]: True

In [9]: %timeit f1()
1000000 loops, best of 3: 379 ns per loop

In [10]: %timeit f2()
1000000 loops, best of 3: 291 ns per loop
```