下面的代码返回所提供数字的所有可能排列。
class Solution:
def permute(self, numbers, start, result):
if start == len(numbers):
print(numbers)
result.append(numbers[:])
return
for i in range(start, len(numbers)):
numbers[start], numbers[i] = numbers[i], numbers[start]
self.permute(numbers, start + 1, result)
numbers[start], numbers[i] = numbers[i], numbers[start]
def solution(self, numbers):
result = []
if not numbers or len(numbers) == 0:
return numbers
self.permute(numbers, 0, result)
return result
res1 = Solution().solution([1, 2, 3])
print(res1)此实例的最终输出将是
[[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 2, 1], [3, 1, 2]]但是当我稍微修改permute函数时,输出就完全不同了。
def permute(self, numbers, start, result):
if start == len(numbers):
print(numbers)
result.append(numbers) #changing this line
return
for i in range(start, len(numbers)):
numbers[start], numbers[i] = numbers[i], numbers[start]
self.permute(numbers, start + 1, result)
numbers[start], numbers[i] = numbers[i], numbers[start]给出了输出
[[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]]当我使用
result.append([x for x in numbers])或
result.append(numbers[:])但当我用
result.append(numbers)有人能帮我弄明白为什么会发生这种事吗?
发布于 2016-05-23 14:47:58
如果您不使用所描述的技术创建对象的副本,则会将相同的对象一次又一次地放在列表中。
下面是一个简短的例子来说明这个问题:
>>> a=[1,2]
>>> b=[a,a]
>>> a.append(3)
>>> b # [[1, 2, 3], [1, 2, 3]]https://stackoverflow.com/questions/37394090
复制相似问题