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 2
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 只会创建一次该对象
|