+ =运算符弄乱了类中的列表分配?

时间:2019-05-06 06:38:06

标签: python python-3.x

+=运算符执行奇数列表分配。

这是一个家庭项目。我正在Ubuntu上运行并使用Python 3.x。

使用+=时会出现这种意外行为:

class foo:
    def __init__(self, arg=[]):
        self.arg = arg

x = foo()
for _ in range(100):
    x.arg += [foo()]

x.arg == foo().arg
# True

如果我不这样做:

class foo:
    def __init__(self, arg=[]):
        self.arg = arg

x = foo()
for _ in range(100):
    x.arg = x.arg + [foo()]

x.arg == foo().arg
# False

在第一种情况下,我希望x.arg == foo().arg返回False而不返回True

编辑:

这可能是“Least Astonishment” and the Mutable Default Argument的副本,但是为什么x.arg += [foo()]的行为不同于x.arg = x.arg + [foo()]

0 个答案:

没有答案