def call(val = ['a']):
print val
val.append("b")
return val
The output of the above function if run many times is confusing. Somehow it is reusing the value of val set in previous execution. According to me the output should be: ['a', 'b'] each time.