class Solution(object):
def subsets(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
if len(nums)==1:
return [[nums[0]], []]
else:
sub_next = self.subsets(nums[1:])
result = []
for item in sub_next:
item_tmp = item[:] # deep copy doesnot change memory
result.append(item_tmp)
item.extend([nums[0]])
result.append(item)
return result
程序中python的两个语法容易出错
- 深度复制copy()函数使用后报错:has no attribute of copy(),是python版本的不同,用切片技术代替[:]
a=[2] result=[] result.append(a) a.extend([3]) result.append(a) print(result) ## 实际输出是:[[2, 3], [2, 3]] ## 预期输出是:[[2,3], [2]]
原因还是python的复制memory问题,而第一次result.append(a)的时候不是深度复制,那么当a.extend()之后修改了a的值之后,result的值也发生了相应的变化,那么第一次将a复制给一个新的变量b,b=a[:],再result.append(b)就可以了



