The difference has to do with when the variable is bound, in your case:

Compare:

```python
def f(a,b,c=3,d=4):
    return '%s %s %s %s'%(a,b,c,d)

n='n'
from functools import partial

f_lambda = lambda: f(1,n,c=n,d=5)
f_partial = partial(f,1,n,c=n,d=5)

print "lambda:", f_lambda()
print "partial:", f_partial()

n=10
print
print "setting n to n=%s"%n
print

print "lambda:", f_lambda()
print "partial:", f_partial()
```

When lambda is used, the variable `n` is stored as a reference to whatever `n` is defined as in the global namespace (and is substituted in when the function is run).  When partial is used, the value of `n` is captured when the function is defined.

See http://stackoverflow.com/a/3252364/1200039 for more.