我是第一次提问者,如果我的问题有误请指出。
我正在刷Leetcode时遇到了一个问题(与问题无关),在Python中我无法理解或通过谷歌搜索找到答案。这特别困难,因为我不确定我的理解不足是否在于:
- 递归
- Python中的
+=
运算符或变量分配等一般操作 - 还是Python的按共享传递行为
- 或仅仅是其他某些原因
以下是简化的代码:
class Holder:
def __init__(self, val=0):
self.val = val
class Solution:
def runThis(self):
holder = Holder()
self.diveDeeper(holder, 5)
return
def diveDeeper(self, holder, n):
if n==0:
return 1
# 1) Doesn't result in mutation
holder.val += self.diveDeeper(holder, n-1)
# 2) Also doesn't result in mutation
# holder.val = holder.val + self.diveDeeper(holder, n-1)
# 3) !! Results in mutations
# returnVal = self.diveDeeper(holder, n-1)
# holder.val += returnVal
print(holder.val)
return 1
a = Solution()
a.runThis()
所以,我的主要困惑在于(1)和(3)在语义上看起来完全相同,但结果却完全不同:
================ RESTART: Case 1 ===============
1
1
1
1
1
>>>
================ RESTART: Case 3 ===============
1
2
3
4
5
>>>
从(2)中看起来似乎与 +=
操作符无关,为了简洁起见,我没有包含我尝试的数十种变体,但到目前为止没有给我任何线索。非常感谢任何指向正确方向的指针(特别是在面试时可能会被蒙蔽的情况下)
PS:如果相关,我正在使用Python 3.8.2