Python“append(List)”和“append(List[:]”有什么不同?

2024-09-24 22:24:04 发布

您现在位置:Python中文网/ 问答频道 /正文

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


Tags: selftargetreturnifdefmyclassresultlast
1条回答
网友
1楼 · 发布于 2024-09-24 22:24:04

键入时:

self.resList.append(sublist[:])

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

或者,键入时:

self.resList.append(sublist)

Python不会创建一个新的列表,只会附加一个对子列表的引用,所以将来对子列表所做的任何更改都将显示在resList中

更清晰的编码方法是:

self.resList.append(list(sublist))

相关问题 更多 >