首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python列表在递归中的行为

python列表在递归中的行为
EN

Stack Overflow用户
提问于 2016-05-23 14:46:24
回答 1查看 59关注 0票数 0

下面的代码返回所提供数字的所有可能排列。

代码语言:javascript
复制
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)

此实例的最终输出将是

代码语言:javascript
复制
[[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 2, 1], [3, 1, 2]]

但是当我稍微修改permute函数时,输出就完全不同了。

代码语言:javascript
复制
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]

给出了输出

代码语言:javascript
复制
[[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]]

当我使用

代码语言:javascript
复制
result.append([x for x in numbers])

代码语言:javascript
复制
result.append(numbers[:])

但当我用

代码语言:javascript
复制
result.append(numbers)

有人能帮我弄明白为什么会发生这种事吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-23 14:47:58

如果您不使用所描述的技术创建对象的副本,则会将相同的对象一次又一次地放在列表中。

下面是一个简短的例子来说明这个问题:

代码语言:javascript
复制
>>> a=[1,2]
>>> b=[a,a]
>>> a.append(3)
>>> b               #   [[1, 2, 3], [1, 2, 3]]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37394090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档