Python-“ append(List)”和“ append(List [:])”有何不同?

时间:2019-11-13 16:37:31

标签: python python-3.x list append dfs

这是LeetCode 39 problem的答案,我在github上找到了。

class Solution(object):
def combinationSum(self, candidates, target):

    self.resList = []
    candidates = sorted(candidates)
    self.dfs(candidates, [], target, 0)
    return self.resList

def dfs(self, candidates, sublist, target, last):
    if target == 0:
        // Change this line
        self.resList.append(sublist[:])
    if target < candidates[0]:
        return
    for n in candidates:
        if n > target:
            return
        if n < last:
            continue
        sublist.append(n)
        self.dfs(candidates, sublist, target - n, n)
        sublist.pop()

myClass = Solution()
result = myClass.combinationSum([2, 3, 5], 8)
print(result)

在这种情况下,输出正确。

[[2, 2, 2, 2], [2, 3, 3], [3, 5]]

但是如果我改变

...
self.resList.append(sublist[:])
...

对此

...
self.resList.append(sublist)
...

输出将为

[[], [], []]

我不知道这里的“ sublist”和“ sublist [:]”有什么区别?

1 个答案:

答案 0 :(得分:0)

键入时:

self.resList.append(sublist[:])

Python正在创建一个新列表对象,并将新列表的引用附加到resList。

或者,当您键入:

self.resList.append(sublist)

Python不会创建新列表,而只会向子列表添加引用,因此您以后对子列表所做的任何更改都将显示在resList中。

更清晰的编码方式是:

self.resList.append(list(sublist))