gpt4 book ai didi

Python:添加到列表中一个对象的字典会更改列表中所有其他对象的所有字典

转载 作者:行者123 更新时间:2023-11-28 22:38:33 26 4
gpt4 key购买 nike

所以 Python 不是我的强项,我遇到了一个我认为很奇怪的问题。我已将问题缩小到几行代码,并对其进行了简化,以便更容易提出这个问题。我有一个对象列表,这个对象:

class FinalRecord():
ruid = 0
drugs = {}

我在 shell 中创建它们是这样的:

finalRecords = []
fr = FinalRecord()
fr.ruid = 7
finalRecords.append(fr)
fr2 = FinalRecord()
fr2.ruid = 10
finalRecords.append(fr2)

一旦我想改变一个对象的药物字典,它也会为另一个对象改变它

finalRecords[0].drugs["Avonex"] = "Found"

我打印出来:

finalRecords[1].drugs

它显示:

{'Avonex':'Found'}

当我期望它实际上是空的时。我知道我并不完全理解 Python 如何处理这些对象,有人可以帮我解决这个问题吗?

最佳答案

这是因为drugs 是类属性。因此,如果您为一个对象更改它,它实际上会在其他对象中更改。

如果您希望没有这种行为,那么您正在寻找实例属性。在你的 __init__ 中设置药物,如下所示:

class FinalRecord():
def __init__(self):
self.ruid = 0
self.drugs = {}

注意 self 的使用,它是对您的对象的引用。

这是关于 class vs instance attributes 的一些信息

因此,说明此行为的完整演示:

>>> class FinalRecord():
... def __init__(self):
... self.ruid = 0
... self.drugs = {}
...
>>> obj1 = FinalRecord()
>>> obj2 = FinalRecord()
>>> obj1.drugs['stuff'] = 2
>>> print(obj1.drugs)
{'stuff': 2}
>>> print(obj2.drugs)
{}

关于Python:添加到列表中一个对象的字典会更改列表中所有其他对象的所有字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35512177/

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