gpt4 book ai didi

python - 附加到同一个列表

转载 作者:行者123 更新时间:2023-11-28 22:56:57 25 4
gpt4 key购买 nike

我有扎实的 C/C++ 背景,所以如果我的问题很愚蠢,请多多包涵。

这里我有两个声明封装数据的类,

class Node:
Term = ""
TermInfo = []
def __init__(self,S,Info):
self.Term = S
self.TermInfo.append(Info)

class TermInfo:
DocID = 0
Freq = 0
def __init__(self,ID,F):
self.DocID = ID
self.Freq = F

我正试图以这种方式操纵它们

 Info = TermInfo(ID,0)
node = Node(j,Info)
Dict[j] = node

基本上我试图构建一个字典,其中包含由字符串“Term”和“Terminfo”列表组成的节点,我希望每个节点都有自己的副本。但是,在我连续两次调用三行之后

Info = TermInfo(ID,0)
node = Node(j,Info)
Dict[j] = node

Info = TermInfo(ID,0)
node = Node(j,Info)
Dict[j] = node

我很惊讶地看到“TermInfo”的两个列表指向相同的内存地址并且第二个 append() 也改变了第一个列表,那么我如何确保每个节点都有自己的副本而不是指向到同一个地址?谢谢

最佳答案

简答:

__init__ 中创建一个新列表。

def __init__(self,S,Info):
self.Term = S
self.TermInfo = [Info]

长答案:

这与 python 如何查找属性有关。当您执行以下操作时:instance.attribute,python 首先查找实例的属性。如果在那里找不到,它会在 上查找属性。在这里,您在类上有一个列表属性,并且您继续通过实例附加到该属性。所以当你有这条线时:

self.TermInfo.append(whatever)

Python先看看self。但是,self 没有 TermInfo 属性,因此 python 会查看 self.__class__(Node 在在这种情况下)对于 TermInfo 属性——它找到它,所以它附加到 Node.TermInfo 列表。

关于python - 附加到同一个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14804921/

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