在下面的代码中,我定义了一个Node类,该类在实例化时应具有一个空的“ childarr”属性。然后,我实例化该类并将其传递给方法“ expnd”。这将三个新节点添加到childarr数组。正如预期的那样,第一个打印语句显示“节点”实例的子级的长度为3。但是现在,我从头开始实例化“节点”类的新实例。由于我在类的 init 方法中指定,如果对此变量不进行任何传递,则该变量应为空数组,因此我期望nn具有空的childarr属性。但是,第二个打印语句显示它实际上也有三个孩子。
令我非常困惑的是,为什么“ 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)))
答案 0 :(得分:1)
问题在于,您使用在<session-config>
<cookie-config>
<!-- <http-only>true</http-only> -->
<secure>true</secure>
</cookie-config>
<tracking-mode>COOKIE</tracking-mode>
</session-config>
的定义中创建的相同的空列表实例实例化了所有“空” childarr
。
更改此行为的一种方法:
__init__
结果:
class Node():
def __init__(self, childarr=None):
self.childarr = childarr or []
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)))