第一次有勇气写文章,记录一下程序媛路边的每一道风景~
学习Python的时间不长,但是很多教程都介绍了python的浅拷贝和深拷贝,虽然理解它的概念,却不知道具体该怎么用,直到今天~
这是剑指offer上的一个小程序,就是返回一棵二叉树上,所有路径大小(根到叶子节点的元素和)为rest的路径集合:
def findallpath(self, root, rest, pathlist, path):
if root is None:
return
path.append(root.val)
rest -= root.val
if root.left is None and root.right is None:
if rest == 0:
pathlist.append(pathlist)
self.findallpath(root.left, rest, pathlist, path)
self.findallpath(root.right, rest, pathlist, path)
# print path
path.pop()
上面的代码中,想用pathlist
保存所有满足条件的path
,但是运行程序发现,结果是这样的[[][]]
打印path
,path
可以找到正确的结果。
调试后,发现pahtlist.append
操作时,使用了浅拷贝,添加的是path
指向的元素(有点类似C中的引用)。当path
修改时,pathlist
也会随着变化,所以,我们并不能保存到满足条件时的path
。。。
更正,将代码改为pathlist.append(copy.deepcopy(path))
,将path
中的所有元素都真正copy给pahtlist
结果正确~
yeah!