def recursive_dfs(graph, start, path=None): if path is None: path = [] path.append(start) for node in graph[start]: if not node in path: recursive_dfs(graph, node, path) return path
def recursive_dfs(graph, start, path=[]): path.append(start) for node in graph[start]: if not node in path: recursive_dfs(graph, node, path) return path
def recursive_dfs(graph, start, path=list()): path.append(start) for node in graph[start]: if not node in path: recursive_dfs(graph, node, path) return path
recursive_dfs([[1,2], [0], [3], [1]], 0)
以上 3 个都没发现问题。但正确的只有第一个。
![]() | 1 Xs0ul 2020-02-15 03:09:57 +08:00 ![]() https://stackoverflow.com/questions/1132941/least-astonishment-and-the-mutable-default-argument 和 dfs 无关, 不要把 mutable 的对象作为默认参数 |
![]() | 2 lbfeng OP |
![]() | 3 so1n 2020-02-15 03:20:12 +08:00 可以访问 recursive_dfs.__defaults__ 有绑定动态变量时,每次访问后 recursive_dfs 都会把局部变量保存在__defaults__ |
![]() | 4 leishi1313 2020-02-15 06:14:53 +08:00 via Android 你把 3 把 3 个 diff 一下也能发现问题在哪里了,然后顺着看看 python 怎么处理 mutable 默认参数不就明白问题的本质了吗。 说难听点,不会学习的话趁早放弃编程,或者你试试抄代码学习 https://zhuanlan.zhihu.com/p/31606615 |
![]() | 5 lbfeng OP @leishi1313 是是是。应该向您学习,生下来就是大牛。 |
![]() | 6 kyokuheishin 2020-02-15 10:51:05 +08:00 可变对象造成的问题。 |
![]() | 8 poplar50 2020-02-15 14:23:01 +08:00 via Android 一楼说的很详细了 对于函数默认参数使用可变对象的 Python 只会创建一次该对象 |