python构造函数默认参数lis

2024-03-28 15:09:51 发布

您现在位置:Python中文网/ 问答频道 /正文

默认参数列表对于所有实例都是相同的对象吗?你知道吗

    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保持不变。但是,如果我删除自我成员,现在代码如下所示:

    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

当a等于[1,2,3]时,id保持不变。你知道吗

我完全糊涂了。。。有人能解释吗?你知道吗


Tags: 对象实例代码selfid列表参数init
1条回答
网友
1楼 · 发布于 2024-03-28 15:09:51

是的,这就是为什么你要这么做

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

所以我希望答案是“如果你创建一个列表,删除它,再创建另一个列表,很有可能它会重用相同的分配内存位置”。你知道吗

相关问题 更多 >