我给你两个functions
:
class Message:
def __init__(self, text, log):
self.text = text
self.log = log
def copy(self):
return Message(self.text, self.log)
def add(self, more):
self.text += more
self.log += more
return self
msg1 = Message("",[]).add("A")
msg2 = msg1.copy().add("B")
print(msg1.text, msg1.log)
print(msg2.text, msg2.log)
此prints
A ['A','B'] AB ['A','B']
这是(对我而言)意想不到的事情发生的地方-
list_1 = [1]
list_2 = list_1.copy()
list_2 += 'b'
print(list_1) # prints [1]
print(list_2) # prints [1,'b']
所以,我似乎无法理解为什么行为与我在两个函数中都使用+ =不同。我已经阅读了object.__iadd__
的文档,但从中不能真正理解我的问题的解决方案。
答案 0 :(得分:2)
在第一种情况下,您要将相同的对象([]
)传递到msg1
和msg2
。当您使用msg1
修改该对象时,msg2
也会看到该更改。
如果要在msg2
中使用其他对象,则还需要复制log
:
def copy():
return Message(self.text, self.log.copy())
这是您在第二种情况下要做的,这就是它起作用的原因。