Python 注意嵌套数组的拷贝和引用

Posted SpikeKing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 注意嵌套数组的拷贝和引用相关的知识,希望对你有一定的参考价值。

Python的数组默认是引用状态,如果一个数组放到另一个数组中,则需要把第1个数组进行copy,否则会一改全改。

拷贝数组的方式有两种,copy.copy(nums) 或 nums[:]。

例如全排列的回溯法,如果直接res.append(nums),则会出错,元素全部相同;而使用copy模式,则可以正确输出全排列。

import copy

class Solution:
    def permute(self, nums: List[int]) -> List[List[int]]:
        def backtrack(first=0):
            if first == n:
                res.append(nums[:])
                # res.append(copy.copy(nums))  等价
                print('res: {}'.format(res))
                print('nums: {}'.format(nums))
                print('nums[:]: {}'.format(nums[:]))
            for i in range(first, n):
                nums[first], nums[i] = nums[i], nums[first]
                backtrack(first+1)
                nums[i], nums[first] = nums[first], nums[i]
        res = []
        n = len(nums)
        backtrack()
        return res

参考:https://leetcode-cn.com/problems/permutations/

以上是关于Python 注意嵌套数组的拷贝和引用的主要内容,如果未能解决你的问题,请参考以下文章

Python对象的浅拷贝与深拷贝

2.深拷贝与浅拷贝的区别

深拷贝/浅拷贝

深拷贝/浅拷贝

js实现浅拷贝和深拷贝

js注意事项1(数据类型内存深浅拷贝闭包this指向callapplybind方法)