python中对list的操作append和“+”有什么不同

Using list.append modifies the list in place - its result is None. Using + creates a new list.

 看看下面两段代码:

demo1

class Solution(object):
    def permute(self, nums):
        """
        :type nums: List[int]
        :rtype: List[List[int]]
        """
        res = []
        self.dfs(nums, [], res)
        return res
    
    def dfs(self, nums, path, res):
        if not nums:
            res.append(path)
        for i in xrange(len(nums)):
            self.dfs(nums[:i]+nums[i+1:], path+[nums[i]], res)

 demo2

class Solution(object):
    def permute(self, nums):
        """
        :type nums: List[int]
        :rtype: List[List[int]]
        """
        if not nums:
            return []
        
        res = []
        self.helper(nums, res, [])
        return res
    
    def helper(self, nums, res, item):
        if len(item) == len(nums):
            res.append(item[:])
            return
        
        for num in nums:
            if num not in item:
                item.append(num)
                self.helper(nums, res, item)
                item.pop()

这两个代码里面path+[nums[i]]时就不用path[:]而用path,另一段程序则相反。

试着将demo2中的item[:]改成item的话,会惊奇的发现res是[ [], [], []........]这样的空列表。这是因为,item不会创建新对象,item着个name还是refer到了原来的对象,而那个对象最后都会pop成空列表。

猜你喜欢

转载自blog.csdn.net/BobChill/article/details/85112284