Can someone explain why in the following example all functions are the same after running? Is there a way to avoid this and get the distinct function I want (please don't suggest using partial).
def lin_fun(x, a, b):
    return a*x + b
funs = {}
params = [(1,2), (3,4)]
for param in params:
    funs[param] = lambda x: lin_fun(x, *param)
    
print(funs[params[0]](100))
# prints 304
print(funs[params[1]](100))
# prints 304
 
     
    