链接:46. 全排列 - 力扣(LeetCode)

抄的官方题解
res.append(nums[:]) 这样是可以的,但是res.append(nums)这样不行。
原因是如果使用赋值操作将nums赋值给另一个变量,那么修改新变量的值会影响原始列表nums的值。例如,如果执行新列表变量new_nums = nums,那么在对new_nums进行修改后,nums的值也会被修改。但如果使用nums[:]进行切片操作赋值给新变量,则对新变量进行的任何修改都不会影响原始列表nums的值。
 1 class Solution(object):
 2     def permute(self, nums):
 3         """
 4         :type nums: List[int]
 5         :rtype: List[List[int]]
 6         """
 7         def backTrack(n):
 8             if n == length:
 9                 res.append(nums[:])
10             i = n
11             while i < length:
12                 nums[i], nums[n] = nums[n], nums[i]
13                 backTrack(n+1)
14                 nums[i], nums[n] = nums[n], nums[i]
15                 i += 1
16         length = len(nums) 
17         res = []
18         backTrack(0)
19         return res
20