深copy浅copy解决Python中的remove问题

问题引入:

在进行 remove 移除数组中相同数字的操作时,发现最后的返回结果中仍然会包含未完全移除的数字。

class Solution(object):
    def removeElement(self, nums, val):

        for number in nums:
            if number == val:
                nums.remove(val)
        return nums

s = Solution()
nums = [0, 1, 2, 2, 3, 0, 4, 2]
val = 2
print(s.removeElement(nums, val))

结果为: [0, 1, 3, 0, 4, 2]


问题思考与分析:

For in 是对下标进行操作,而remove是对值进行操作

当执行原始数组[0, 1, 2, 2, 3, 0, 4, 2]的前两个不符合,则保留,第三个数组符合操作,则移除,此时数组为[0, 1, 2, 3, 0, 4, 2],因为for in 是按照下标取值的,因此就会把下一个数字2跳过,转而判断数字3是否满足要求


问题思考与分析:

有必要了解一下 浅拷贝深拷贝

   浅拷贝 是什么呢?浅拷贝是在复制的时候只增加了一个指针,没有给其分配了内存空间,即你原来有一个a列表,你这个a里的值都有指向自己的指针,而且也有自己的内存空间a1,当浅拷贝a列表的时候得到一个A,这个A里的值都有指向自己的指针,但是他的的内存空间还是a1;这个时候你对无论是a还是A进行操作,都会改变内存空间a1里的值。

   深拷贝 是什么呢?深拷贝是在复制的时候不但增加了一个指针,而且还给其分配了内存空间,即你原来有一个a列表,你这个a里的值都有指向自己的指针,而且也有自己的内存空间a1,当深拷贝a列表的时候得到一个A,这个A里的值都有指向自己的指针,而且也有自己的内存空间A1;那么你再对原来的进行操作的时候可以去a里去寻找,在A里进行操作,由于都有自己的独立的内存空间,那么不会相互影响。就可以避免遗漏值,出现错误。

import copy
class Solution(object):
    def removeElement(self, nums, val):

        nums_copy = copy.deepcopy(nums)
        for number in nums:
            if number == val:
                nums_copy.remove(val)
        return nums_copy

s = Solution()
nums = [0, 1, 2, 2, 3, 0, 4, 2]
val = 2
print(s.removeElement(nums, val))

结果为:[0, 1, 3, 0, 4]


相关博客:

python中的copy.deepcopy()

大家加油 :)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章