python链表对self节点的求值



我构建了两个链表,但第二个函数丢失了链接。我可以看到我没有自我,但它怎么会失去与父母的联系呢。因为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:101.2.3.4.5.6.7.8.9链接2:10

问题就在这样的部分。

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

self是对当前对象的引用,但它不是特殊的(除了约定(,并且当您为其赋值时,python会使其成为局部变量。

这里发生的是,将self设置为对self.next引用的对象的引用(在本例中为None(,然后将self设置为指向新的Node对象。下一次通过循环时,在执行任何操作之前,将self再次指向None

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

def build_link(first_node):
    cur_node = first_node
    for tmp in range(10):
        cur_node.next = Node(tmp)
        cur_node = cur_node.next

相关内容

  • 没有找到相关文章

最新更新