zoukankan      html  css  js  c++  java
  • 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

    转载于:https://www.cnblogs.com/zwq-/p/10800196.html

  • 相关阅读:
    VS2019正式版 密钥 Visual Studio 2019 破解 激活码 Key
    关于随机数的前世今生
    木兮的纪中集训感想
    浅谈欧洲算法——模拟退火
    你没听过的梅森旋转算法
    二分贪心杂题
    DP专项训练
    实验八 进程间通信
    实验七 信号
    实验六 进程基础
  • 原文地址:https://www.cnblogs.com/zealousness/p/12060955.html
Copyright © 2011-2022 走看看