1
soralley OP 发现self.aList = aList[:]这样就可以分离开来了,但好像不容易理解,还请高手解疑!
|
2
tedd 2013-10-10 14:20:42 +08:00
参数最好不要用可变的类型吧,很容易相互相应到的
|
3
est 2013-10-10 14:24:34 +08:00
def __init__(self, aList = []):
这里的 [] 其实是隐含申明成全局变量了。 def __init__(self, aList = None): if not aList: aList = [] 这样ok了。 |
4
clino 2013-10-10 14:31:16 +08:00
好像 http://v2ex.com/t/75013 说的就是这个吧
如果用 x = A([]) y = A([]) 就不会了,或者 def __init__(self, aList = None): if aList==None:aList = [] self.aList = aList 这样也可以 |
5
soralley OP 最新发现,把默认参数拉长了就不会,好像是编译优化的问题,恩,好像
est兄正解 |
6
dreampuf 2013-10-10 16:38:28 +08:00
In [75]: def FuncA(ls=[]): ls.append(1)
In [76]: FuncA.func_defaults Out[76]: ([],) In [77]: FuncA() In [78]: FuncA.func_defaults Out[78]: ([1],) In [79]: FuncA() In [80]: FuncA.func_defaults Out[80]: ([1, 1],) |
7
piglei 2013-10-10 17:39:16 +08:00
不要使用可变类型来作为方法的默认值,具体可以了解:
http://effbot.org/zone/default-values.htm |