from functools import lru_cache

def hashifying_lru_cache(
        func_or_None=None, maxsize=128, typed=False, hasher=id):
    def decorator(func):
        class Hashified:
            def __init__(self, obj):
                self.obj = obj
            def __eq__(self, other):
                return hasher(self.obj) == hasher(other.obj)
            def __hash__(self):
                return hasher(self.obj)
        def unwrapper(*args, **kwargs):
            return func(
                *(arg.obj if isinstance(arg, Hashified) else arg
                    for arg in args),
                **{name: value.obj if isinstance(value, Hashified) else value
                    for name, value in kwargs.items()}
            )
        def wrapper(*args, **kwargs):
            return decorated(
                *(Hashified(arg) if arg.__hash__ is None else arg
                    for arg in args),
                **{name: Hashified(value) if value.__hash__ is None else value
                    for name, value in kwargs.items()}
            )
        decorated = lru_cache(maxsize=maxsize, typed=typed)(unwrapper)
        return wrapper
    return decorator if func_or_None is None else decorator(func_or_None)

@hashifying_lru_cache
def sum_list(const_list):
    print('got', const_list)
    return sum(const_list)

lst = [1, 2, 3]
print(sum_list(lst))
print(sum_list(lst))