Python - "append(List)" 和 "append(List[ : ])" 有什么不同?

Python - What's different with "append(List)" and "append(List[ : ])"?

这是 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[:]" 有什么不同??

当您输入时:

self.resList.append(sublist[:])

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

或者,当您键入:

self.resList.append(sublist)

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

更清晰的编码方式是:

self.resList.append(list(sublist))