深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()

大家加油 :)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值