首页 > 解决方案 > 列出函数指向最后一个内存地址的返回

问题描述

def printAllPaths(start: Node, end: Node, path=[], path_list: list = []):
    path.append(start.name)
    start.visited == color.black
    if start == end:
        path_list.append(path[:])
    else:
        for v in start.adjacenciesList:
            if v.visited == color.white:
                path_list = printAllPaths(v, end, path)
    start.visited == color.white
    path.pop()
    return path_list

if __name__ == '__main__':
    node1 = Node("A")
    node2 = Node("B")
    node3 = Node("C")
    node4 = Node("D")
    node5 = Node("E")

    node1.append(node2)
    node1.append(node3)
    node2.append(node3)
    node2.append(node4)
    node3.append(node4)
    node4.append(node5)
    

    list1 = []
    list2 = []
    list2 = printAllPaths1(node4, node5, [], [])
    list1 = printAllPaths(node1, node4, [], [])

    print(list1)
    print(list2)

输出:

[['D', 'E'], ['A', 'B', 'C', 'D'], ['A', 'B', 'D'], ['A', 'C', 'D']]

[['D', 'E'], ['A', 'B', 'C', 'D'], ['A', 'B', 'D'], ['A', 'C', 'D']]

预期输出:

[['A', 'B', 'C', 'D'], ['A', 'B', 'D'], ['A', 'C', 'D']]

[['D', 'E']]

但为什么 LIST1 和 LIST2 指向同一个地址?我不明白

如果你想尝试,我会离开 Node 课程

class Node(object):

    def __init__(self, name, adjacent=[],
                 visited=color.white, predecessor=None):
        self.name = name
        self.adjacenciesList = []
        self.visited = visited
        self.predecessor = predecessor
        self.start = None
        self.finish = None
        self.distance = sys.maxsize
        self.grade = 0

    def __repr__(self) -> str:
        return f'''{self.name}'''

    def append(self, vertex):
        self.adjacenciesList.append(vertex)

标签: pythonlist

解决方案


推荐阅读