1

我建立了两个链表,但第二个函数丢失了链接。我可以看到我对自己没有任何东西,但它怎么会失去来自其父级的链接。因为 None 是一个独立的内存地址?

class Node:
    def __init__(self,data):
        self.next=None
        self.data=data

    def buildLink1(self):
        temp=1
        while temp<10:
            self.next=Node(temp)
            self=self.next
            temp+=1

    def buildLink2(self):
        temp=1
        while temp<10:
            self=self.next
            self=Node(temp)
            temp+=1

    def traverse(self):
        while self:
            print self.data
            self=self.next

if __name__=='__main__':
    print "link 1:"
    root1=Node(10)
    root1.buildLink1()
    root1.traverse()
    print "link 2:"
    root2=Node(10)
    root2.buildLink2()
    root2.traverse()

输出:链接1:10 1 2 3 4 5 6 7 8 9 链接2:10

4

1 回答 1

3

问题在这样的部分。

def buildLink2(self):
    temp=1
    while temp<10:
        self=self.next
        self=Node(temp)
        temp+=1

self是对当前对象的引用,但它并不特殊(按照惯例),并且当您分配给它时,python 使其成为局部变量。

所以这里发生的事情是,您是否设置self为对曾经self.next引用的内容的引用(在这种情况下是None),然后您设置self为指向一个新Node对象。下一次循环时,你selfNone做任何事情之前再次指向。

我认为您真的不希望这些函数成为实例方法,而是成为类方法或独立方法。例如:

def build_link(first_node):

    cur_node = first_node
    for tmp in range(10):
        cur_node.next = Node(tmp)
        cur_node = cur_node.next
于 2013-02-24T03:52:09.157 回答