• python手动实现深拷贝


    深拷贝是将对象全拷贝,包括嵌套对象

    def deepcopy(cls):
        if isinstance(cls, dict):
            dct = {}
            for k, v in cls.items():
                dct[k] = deepcopy(v)
            return dct
        elif isinstance(cls, list):
            li = []
            for item in cls:
                li.append(deepcopy(item))
            return li
        elif isinstance(cls, tuple):
            li = []
            for i in cls:
                li.append(deepcopy(i))
            return tuple(li)
        else:
            return cls

    验证:

    import copy
    
    if __name__ == '__main__':
        lst = [1, 2, 3, 6, 4, ([5, 6, 8, 7, [7, 8, {"acb": 89375, "dxt": "kgfjolij", "v": 222}, 5, 4, 7]], (2,5,{"z":2}))]
    
        res = deepcopy(lst)
        print(res,'deep',id(res[5][0]))
        print('lst', id(lst[5][0]))
        ls = copy.copy(lst)
        print('ls', id(ls[5][0]))
    
    #[1, 2, 3, 6, 4, ([5, 6, 8, 7, [7, 8, {'acb': 89375, 'dxt': 'kgfjolij', 'v': # 222}, 5, 4, 7]], (2, 5, {'z': 2}))] deep 42348296
    # lst 42348168
    # ls 42348168

    代码简化:

    def deepcopy(cls):
        if isinstance(cls, dict):
            return {k: deepcopy(v) for k, v in cls.items()}
        elif isinstance(cls, list):
            return [deepcopy(item) for item in cls]
        elif isinstance(cls, tuple):
            return tuple([deepcopy(item) for item in cls])
        else:
            return cls
  • 相关阅读:
    1新随笔
    MySQL--DML语言
    记一下Spring整合MyBatis踩的坑
    MyBatis(二)动态sql
    Mybatis动态代理注意事项
    几个练习指法和盲打的网站
    友链
    博客初心&心情小计
    博客园美化之标题显示
    博客园美化鼠标点击效果【富强民主文明和谐……】
  • 原文地址:https://www.cnblogs.com/zwq-/p/10800196.html
Copyright © 2020-2023  润新知