gpt4 book ai didi

python - 将项目添加到列表的副本中出现意外行为

转载 作者:行者123 更新时间:2023-12-01 00:48:42 24 4
gpt4 key购买 nike

我向您展示两个函数:

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)

打印

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__ 的文档,但无法真正从中理解我的问题的解决方案。

最佳答案

在第一种情况下,您将相同的对象 ([]) 传递给 msg1msg2。当您使用 msg1 修改该对象时,msg2 也会看到该更改。

如果您想在 msg2 中使用不同的对象,则还需要复制 log:

def copy():
return Message(self.text, self.log.copy())

这就是你在第二种情况下所做的,这就是它起作用的原因。

关于python - 将项目添加到列表的副本中出现意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56736128/

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