使用[:]有什么意义?

Sha*_*ala 0 python list append python-3.x

我今天正在研究某人使用Python3的堆算法回溯的解决方案。解决方案如下:

def permute(self, nums):
    def backtrack(start, end):
        if start == end:
            ans.append(nums[:])
        for i in range(start, end):
            nums[start], nums[i] = nums[i], nums[start]
            backtrack(start+1, end)
            nums[start], nums[i] = nums[i], nums[start]

    ans = []
    backtrack(0, len(nums))
    return ans
Run Code Online (Sandbox Code Playgroud)

现在我正在看这行ans.append(nums[:]),写作的目的是nums[:]什么?不能nums正确编写功能吗?

Dee*_*top 7

考虑以下

>>> a = [1,2,3]
>>> b = [a]
>>> b[0].append(4)
>>> a
[1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)

如您所见,由于您将对象存储在中,而不仅仅是的值,所以修改b[0]会修改。使用可以复制列表,因此。aaba[:]

>>> a = [1,2,3]
>>> b = [a[:]]
>>> b[0].append(4)
>>> a
[1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

所以重点是传递值,而不是对象本身。