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

2024-09-28 05:26:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个递归类(它有一个方法,将自身的一个实例放在一个dict中,dict是一个类变量),允许我迭代地将对象链接在一起,并形成一种树结构。我发现有时候我的数据有一些循环性,为了避免在数据中的循环中丢失,我尝试在当前分支上携带一个我去过的节点列表,但事情并没有像我预期的那样工作。考虑以下事项:

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的?我如何防止这种情况发生?这是跟踪递归对象中我的位置的错误方法吗


Tags: 数据对象实例方法testselfchain节点
1条回答
网友
1楼 · 发布于 2024-09-28 05:26:58

在参数中,prevChain作为引用传递。所以,当你这样做的时候-

self.chain = prevChain

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

self.chain = copy.deepcopy(prevChain)

相关问题 更多 >

    热门问题