你能用Python澄清这个引用问题吗?

时间:2015-03-17 18:23:58

标签: python python-2.7 reference concept

我习惯了指针和参考,但我需要澄清一点:

我的Node类中有这个方法:

def createNewNode(graph):
    #Create New Node Dictionary
    newNode = {}
    # Fill in Details for that Node
    newNode['NAME'] = 'Max'
    newNode['AGE'] = 22
    newNode['ID'] = 'DC1234SH987'
    #Add the Node to the Graph
    graph.addNode(newNode)

创建的newNode的范围在函数createNewNode()内。现在,此节点已添加到Graph类中的节点列表中。

Graph类具有以下功能:

def addNode(self, node):
    self.nodeList.append(node)

现在,Graph类函数addNode()只是将节点附加到图类中的节点列表中。在节点类中调用graph.addNode()之后,newNode变量的范围何时停止存在?

现在,附加到Graph类列表中的数据是否无效? append()是否传递了对象的新副本?你能解释一下吗?

(在此示例中,图表只包含节点列表,节点实际上是包含详细信息的字典。)

1 个答案:

答案 0 :(得分:5)

名称newNode超出范围,但它所引用的对象不会被销毁。您通过将该对象附加到nodeList添加了对该对象的另一个引用。 append不会复制,但会创建对同一对象的单独引用。当名称结束时,名称超出范围,但对象仅在所有引用消失时被垃圾收集。