Python 代码有效,相同的 Java 代码无效

Python code works, same Java code does not

我有一张图,它被描述为具有结构的地图(Java 和 Python 都相同,但示例在 Python 中):

graph = {'A': ['B', 'C'],
     'B': ['A', 'C', 'D'],
     'C': ['A', 'B', 'D', 'F'],
     'D': ['B', 'C'],
     'E': ['F'],
     'F': ['C', 'E']}

我想获取从 'A' 到 'E' 的所有路径。对于 Python 它完美地工作:

def find_all_paths(graph, start, end, path=[]):
path = path + [start]
if start == end:
    return [path]
paths = []
for node in graph[start]:
    if node not in path:
        newpaths = find_all_paths(graph, node, end, path)
        for newpath in newpaths:
            paths.append(newpath)
return paths

OUTPUT: [['A', 'B', 'C', 'F', 'E'], ['A', 'B', 'D', 'C', 'F', 'E'], ['A', 'C', 'F', 'E']]

但是在 Java 我没有得到正确的结果:

    static List<List<String>> findAllPaths(String start, String end, List<String> path) {
    path.add(start);
    if (start.equals(end)) {
        return List.of(path);
    }
    List<List<String>> paths = new ArrayList<>();
    for (String node : graph.get(start)) {
        if (!path.contains(node)){
            List<List<String>> newpaths = findAllPaths(node, end, path);
            paths.addAll(newpaths);
        }
    }
    return paths;
}

OUTPUT: [[A, B, C, D, F, E]]

我已经调试过了,我知道 Python 为每个函数调用存储 path 变量,而 Java 将这个变量存储为所有函数的全局变量。但是,我不确定。您有什么建议吗?

path = path + [start] 不等同于 path.add(start)。 Python版本正在制作新的列表; Java 版本正在更改现有列表。

Java 相当于 path = path + [start] 是先复制列表,然后添加新元素。

path = new ArrayList<>(path);
path.add(start);