Will it be a problem that Lambda(x, x + variable_0) and Lambda(x, 2*x) will hash to the same value? Could you try this in your branch:

```
from sympy.core.cache import cacheit
@cacheit
def func(L):
  return L(1)

var('variable_1')
func(Lambda(x, x + variable_1))
func(Lambda(x, 2*x))

func(Lambda(x, x/variable_1))
func(Lambda(x, variable_1/x))

If pairs give the same values then this hashing is not going to work. It don't think it will even work if you add the free symbols. You need do make sure there is no clash with existing symbols. (But I could very well be missing something since Aaron mentions that clashes are expected....) But I would suggest

```
@property
def _folded_expr(self):
    u = "_"
    free = self.free_symbols
    while any(s.name.startswith(u) for s in free):
        u += "_"
    tmp = '%s%%i' % u
    return self.expr.xreplace(dict(zip(self.variables, [Symbol(tmp % i) for i in range(len(self.variables))])))

def _hashable_content(self):
    return (self.nargs, self._folded_expr) 
```