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 也会随之改变。这说明了在学习过程中前面一些基础内容,可能会忘记,需要在使用时发现问题,再去对于具体的一些知识点进行补充强化。

  • 相关阅读:
    msyql 死锁
    yii2 操作数据库
    yii2 加载静态资源
    Yii2 之 UrlManager 实践 (一)
    Wordpress 之 Rewrite Rules
    yii2 使用gii生成代码文件
    权限设计的杂谈
    NodeJS —— 自定义流的实现
    浅析递归
    请将你的App签名文件放进保险箱
  • 原文地址:https://www.cnblogs.com/ysmintor/p/shua-leetcode-shi-zai-xue-xi-python-zhong-yin-yong.html
Copyright © 2011-2022 走看看