Python:浅拷贝和深拷贝实例

2017-05-09  本文已影响0人  这只鱼慢悠悠

第一次有勇气写文章,记录一下程序媛路边的每一道风景~

学习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,但是运行程序发现,结果是这样的[[][]]
打印pathpath可以找到正确的结果。

调试后,发现pahtlist.append操作时,使用了浅拷贝,添加的是path指向的元素(有点类似C中的引用)。当path修改时,pathlist也会随着变化,所以,我们并不能保存到满足条件时的path。。。

更正,将代码改为pathlist.append(copy.deepcopy(path)),将path中的所有元素都真正copy给pahtlist结果正确~
yeah!

上一篇 下一篇

猜你喜欢

热点阅读