我有一个递归类(它有一个方法,将自身的一个实例放在一个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的?我如何防止这种情况发生?这是跟踪递归对象中我的位置的错误方法吗
在参数中,prevChain作为引用传递。所以,当你这样做的时候-
实际上,您正在将prevChain的引用设置为self.chain。因此,prevChain和self.chain是相同的变量。 要将它们分开,请使用deepcopy使用copy lib创建prevChain的新对象,然后将其分配给self.chain
相关问题 更多 >
编程相关推荐