gpt4 book ai didi

Python "strange"输出

转载 作者:行者123 更新时间:2023-11-28 19:51:33 25 4
gpt4 key购买 nike

class Foo(object):
def __init__(self,x):
self.x = x
self.is_bar = False
def __repr__(self): return str(self.x)

class Bar(object):
def __init__(self,l = []):
self.l = l
def add(self,o):
self.l += [o]
def __repr__(self): return str(self.l)

def foo_plus_foo(f1,f2):
t = Bar()
if not (f1.is_bar and f2.is_bar):
f1.is_bar = True
f2.is_bar = True
t.add(f1)
t.add(f2)
print 'HERE'
return t

if __name__ == '__main__':
li = [Foo(1), Foo(2)]
print foo_plus_foo(li[0],li[1])
print foo_plus_foo(li[0],li[1])

意外输出:

HERE
[1, 2]
[1, 2]

预期输出:

HERE
[1, 2]
[]

发生了什么事?我做错了什么?为什么 python 使用旧值?我该怎么做才能避免这种情况?

谢谢!

最佳答案

从来没有。做。这个。

def __init__(self,l = []):

从不。

一个 list 对象被重用。而且它是可变的,因此每次重复使用时,都会更新您的方法定义中创建的唯一 []

总是。做。这个。

def __init__( self, l= None ):
if l is None: l = []

这会创建一个全新的、独特的列表实例。

关于Python "strange"输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3905448/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com