On Fri, 7 Oct 2016 10:38 pm, Daiyue Weng wrote: > Hi, I declare two parameters for a function with default values [], > > def one_function(arg, arg1=[], arg2=[]): > > PyCharm warns me: > > Default argument value is mutable, > > what does it mean? and how to fix it?
The usual way to avoid that is: def one_function(arg, arg1=None, arg2=None): if arg1 is None: arg1 = [] # gets a new list each call if arg2 is None: arg2 = [] # gets a new list each call Otherwise, arg1 and arg2 will get the same list each time, not a fresh empty list. Here is a simple example: def example(arg=[]): print(id(arg), arg) arg.append(1) py> def example(arg=[]): ... print(id(arg), arg) ... arg.append(1) ... py> x = [] py> example(x) 3081877196 [] But with the default argument, you get the same list each time: py> example() 3081877100 [] py> example() 3081877100 [1] py> example() 3081877100 [1, 1] py> example() 3081877100 [1, 1, 1] -- Steve “Cheer up,” they said, “things could be worse.” So I cheered up, and sure enough, things got worse. -- https://mail.python.org/mailman/listinfo/python-list