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

Vis*_*ddi 2 python reference concept python-2.7

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

我的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)
Run Code Online (Sandbox Code Playgroud)

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

Graph类具有以下功能:

def addNode(self, node):
    self.nodeList.append(node)
Run Code Online (Sandbox Code Playgroud)

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

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

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

Bre*_*arn 5

名称newNode超出范围,但它引用的对象不会被销毁.您通过附加添加了对该对象的另一个引用nodeList. append不会复制,但它确实创建了对同一对象的单独引用.一个名字超出范围时,该功能是在结束,而是一个对象只有当垃圾收集所有对它的引用都不见了.