提问人:justanothertechdude 提问时间:5/20/2020 更新时间:5/20/2020 访问量:40
递归下实例变量和实例对象的行为
Behaviour of instance variables and instance objects under recursion
问:
我试图澄清我对这两个代码片段之间差异的理解,这两个代码片段找到了二叉树的最大深度。(为简单起见,我没有包括班级)
因此,第一个代码变量始终为 1 的原因是因为它不是一个对象,而只是一个变量,所以当我将它传递到函数中时,就会创建一个它的新“版本”。
而在第二个代码示例中,该函数使用对同一数组对象的引用。
这是否意味着 python 3 是按变量的值和对象的引用传递的?
def maxDepth(self, root: TreeNode) -> int:
if not root:
return 0
max_depth = 1
self.check_depth(root.left, max_depth, 1)
return max_depth
def check_depth(self, node, max_depth, curr_depth):
if not node:
return
curr_depth += 1
self.check_depth(node.left, max_depth, curr_depth)
self.check_depth(node.right, max_depth, curr_depth)
max_depth = max(max_depth, curr_depth)
return
在这里,实例变量被替换为数组对象。
def maxDepth(self, root: TreeNode) -> int:
if not root:
return 0
max_depth = [1]
self.check_depth(root.left, max_depth, 1)
return max_depth[0]
def check_depth(self, node, max_depth, curr_depth):
if not node:
return
curr_depth += 1
self.check_depth(node.left, max_depth, curr_depth)
self.check_depth(node.right, max_depth, curr_depth)
max_depth[0] = max(max_depth[0], curr_depth)
return
谢谢
答: 暂无答案
评论
1
是一个对象。在 Python 中,一切都是一个对象。将对象传递给函数永远不会复制该对象。在一种情况下,您更改了对象(您的列表),在另一种情况下,您没有。就是这么简单。int