附加到实例变量还附加到分配给实例变量的INIT参数



我有一个递归类(它具有将自身的实例放在class变量中的方法(,使我可以迭代地链式链对象并制作一种树结构。我发现有时我的数据对它有一定的循环性,并试图避免在数据中丢失循环,我试图携带我在当前分支上的节点列表,但是事情是根本没有正常工作。考虑以下内容:

class test(object):
    a = 2
    def __init__(self, prevChain):
        self.chain = prevChain
        print("prevChain:", prevChain)
        print("self.chain:", self.chain)
        self.chain.append(self.a)
        print("prevChain:", prevChain)
        print("self.chain:", self.chain)
>>>test([1])
prevChain: [1]
self.chain: [1]
prevChain: [1, 2]
self.chain: [1, 2]
<__main__.test object at 0x00000027CCF1CEB00>

如何将2添加到Prevchain中,如何防止这种情况发生?这是错误地跟踪我在递归对象中的位置的错误方法吗?

在参数中, prevchain 作为参考传递。因此,当您这样做时 -

self.chain = prevChain

您实际上是将 prevchain 的引用设置为 self.chain 。因此, Prevchain self.chain 是相同的变量。要使它们分开,请使用 deepCopy 使用 prevchain 的新对象使用 copy lib ,然后将其分配给 self.chain。

self.chain = copy.deepcopy(prevChain)

最新更新