默认参数列表是否为所有实例的相同对象?
class X():
def __init__(self,a=[]):
self.member=a
print id(a)
k=X([1,2,3])
g=X([1,2,3])
t=X()
h=X()
输出令我惊讶:
140072782781832
140072782901976
140072782816536
140072782816536
正如您所看到的,当a等于[1,2,3]时,id是不同的,但当a为空时,id保持不变。但是,如果我删除self.member,现在代码如下所示:
class X():
def __init__(self,a=[]):
print id(a)
k=X([1,2,3])
g=X([1,2,3])
t=X()
h=X()
输出如下:
140033294171528
140033294171528
140033294206232
140033294206232
当等于[1,2,3]时,id保持不变。
我完全糊涂了......任何人都可以解释一下吗?
答案 0 :(得分:1)
是的,这就是你应该做的原因
class X():
def __init__(self, a=None):
self.a = [] if a is None else a
修改强>
我会指出
class X():
def __init__(self,a=[]):
print(id(a))
k = X([1,2,3])
g = X([1,2,4]) # <- different list values
t = X()
h = X()
也给出了
42678232
42678232
42680152
42680152
所以我希望答案是“如果你创建一个列表,删除它,并创建另一个列表,那么它将重用相同的分配内存位置的可能性很大”。