我在python3中编写了一个递归置换生成器:
def permute(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
ret = []
n = len(nums)
def dfs(temp, visited):
if len(temp) == n:
ret.append(temp[:])
return
for i in range(n):
if not visited[i]:
visited[i] = True
temp.append(nums[i])
dfs(temp, visited)
# Cannot be:
# temp = temp[:-1]
del temp[-1]
visited[i] = False
dfs([], [False for _ in range(n)])
return ret
我最初在递归的dfs返回后使用temp = temp[:-1]
,但这似乎不起作用。明确使用del temp[-1]
工作。
我无法弄清楚为什么会这样,反正请解释一下?
答案 0 :(得分:2)
在函数内部分配局部变量对外界没有影响:
def foo(lst):
lst = [1, 2, 3]
L = [1]
foo(L)
print(L) # still [1]
修改传入的变量:
def foo(lst):
lst.append(4)
L = [1]
foo(L)
print(L) # [1, 4]
在您的情况下,del temp[-1]
会更改传递的列表。在您的代码中,只有一个分配给temp
的列表,其开头为[]
。 temp = temp[:-1]
创建一个新的独立列表。