Chris Rebert
If A.M. Kuchling's list of Python Warts is any indication, Python has removed many of the warts it once had. However, the behavior of mutable default argument values is still a frequent stumbling-block for newbies. It is also present on at least 3 different lists of Python's deficiencies ([0][1][2]).
Example of current, unintuitive behavior (snipped from [0]):
def popo(x=[]): ... x.append(666) ... print x ... popo() [666] popo() [666, 666] popo() [666, 666, 666] [snip] Comments?
As provided by Calvin Spealman, the above can be fixed with: def popo(x=None): x = x if x is not None else [] x.append(666) print x I would also mention that forcing users to learn about mutable arguments and procedural programming is not a bad thing. Learning the "gotcha" of mutable default arguments is a very useful lesson, and to remove that lesson, I believe, wouldn't necessarily help new users to Python, or new programmers in general. - Josiah