首页 > 解决方案 > 令人困惑的python:空列表作为类初始化中的可选kwarg

问题描述

我理解为什么在 python 中会发生以下情况,但这似乎有点违反直觉。任何人都可以解释为什么 python 应该这样吗?为什么在类 G 的第二次实例化时没有再次创建一个空列表?

class G:

    def __init__(self, members=[]):
        self.members = members

    def append(self, x):
        self.members.append(x)


a = G()
a.append(1)
a.append(2)
print(a.members)  # prints: [1, 2]

b = G()
print(b.members)  # prints: [1, 2]    <-------- why????

编辑:如评论中所述,此问题已在此处解决。

标签: python

解决方案


在定义期间评估默认值。所以只创建了一个列表,默认值总是指向它。

print(id(a.members))  
print(id(b.members))  
print(a.members is b.members)

输出:

140226208543200
140226208543200
True

推荐阅读