Python:浅拷贝和深拷贝实例

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

学习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!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 个人笔记,方便自己查阅使用 Py.LangSpec.Contents Refs Built-in Closure ...
    freenik阅读 67,818评论 0 5
  • http://python.jobbole.com/85231/ 关于专业技能写完项目接着写写一名3年工作经验的J...
    燕京博士阅读 12,222评论 1 118
  • Python 简介Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。Python 的设...
    在暴风雨中逆袭阅读 5,697评论 0 12
  • [TOC] 内容 时间:2017/02/21 耗时25分钟 截图 总结 雨的几点各种变化
    上山老人阅读 799评论 0 0
  • 今年第一次起这么早,准时5点起床了,6点弄完,本来师兄说过来接我一起过去的,结果他的车是东莞牌,所以还是走不了,只...
    黄玉翠阅读 2,622评论 0 0