在下面的代码中,我定义了一个节点类,该类在实例化时应该有一个空的“childarr”属性。然后,我实例化该类并将其传递给方法“expnd”。这将向childarr数组添加三个新节点。正如所料,第一个print语句显示“node”实例的childarr的长度是3。但是现在,我从头开始实例化“node”类的一个新实例。由于我在类的init方法中指定,如果没有为该变量传递任何内容,则该变量应为空数组,因此我希望nn具有空childarr属性。然而,第二个print语句显示它实际上也有三个孩子
我很困惑为什么“nn”会受到实例化之前发生的一些代码的影响,而这些代码与它无关
有没有人知道这种行为的原因,以及我在最佳实践方面遗漏了什么
class Node():
def __init__(self, childarr=[]):
self.childarr = childarr
def expnd(node):
for i in range(3):
newnode = Node()
node.childarr.append(newnode)
node=Node()
expnd(node)
print("Length of child array of expanded node:" + str(len(node.childarr)))
nn = Node()
print("Length of child array of new, unrelated node:" + str(len(nn.childarr)))
问题是,您使用在
__init__
的定义中创建的同一个空列表实例实例化了所有的“empty”childarr
。 改变这种行为的一种方法:结果:
相关问题 更多 >
编程相关推荐