zoukankan      html  css  js  c++  java
  • 刷 LeetCode 时再学习 Python 中引用

    在收LeetCode 的113. Path Sum II题目时,参考网络上的一个解答,源码如下

    class Solution:
        def pathSum(self, root: TreeNode, sum: int) -> List[List[int]]:
            def dfs(root, s, path, res):
              if root:
                path.append(root.val)
                s -= root.val
                left = dfs(root.left, s, path, res)
                right = dfs(root.right, s, path, res)
                if not left and not right and s == 0:
                  res.append(path+[])
                path.pop()
                return True
    
            res = []
            dfs(root, sum, [], res)
            return res
    

    但我对其中的res.append(path+[])非常不理解,为什么要加一个空的[]呢?首先这个[]对于前面的加号而言,实质上是 list 的重载运算,附加一个空白的然后再。但为什么加这个呢?

    我便试验将其去除后,发现结果全是空的[[],[]]这种形式,便联想到了会不会是 Python 中引用的问题呢?由于去交互式里通过 id()这个函数实证了,path+[]想达到的目的就是复制一个新的,否则复制的是引用,当 path.pop() 后res.append(path)中的 path 也会随之改变。这说明了在学习过程中前面一些基础内容,可能会忘记,需要在使用时发现问题,再去对于具体的一些知识点进行补充强化。

  • 相关阅读:
    final有什么用?
    数组的定义
    作业
    List 、Set数据结构
    报表工具实现单据套打
    动态格报表的制作
    图形钻取
    报表工具轻松搞定卡片式报表
    列表钻取
    报表中如何实现不规则布局
  • 原文地址:https://www.cnblogs.com/ysmintor/p/shua-leetcode-shi-zai-xue-xi-python-zhong-yin-yong.html
Copyright © 2011-2022 走看看