python中的copy拷贝特性

copy函数只是复制了变量的内存地址,赋值的对象的内存地址指向和原对象一致,相当于直接=赋值了。

deepcopy则是直接开辟一个新的内存地址,如果需要对对象进行修改的同时不影响原来变量,则使用这个。

下面为测试代码和结果:

from mmcv import Config

def test_cfg(cfg_path):
    cfg = Config.fromfile(cfg_path)
    print(cfg.model.train_cfg)
    cfg2 = cfg.copy()
    cfg2.model.train_cfg = None
    print(cfg.model.train_cfg)
    print(cfg2.model.train_cfg)

def test_copy(cfg_path):
    cfg = Config.fromfile(cfg_path)
    print('origin cfg', cfg.model.train_cfg)
    cfg2 = cfg.copy()
    cfg2.model.train_cfg = None
    print('after altered cfg1', cfg.model.train_cfg)
    print('after altered cfg2', cfg2.model.train_cfg)

def test_equal(cfg_path):
    cfg = Config.fromfile(cfg_path)
    print('origin cfg', cfg.model.train_cfg)
    cfg2 = cfg
    cfg2.model.train_cfg = None
    print('after altered cfg1', cfg.model.train_cfg)
    print('after altered cfg2', cfg2.model.train_cfg)

def test_deepcopy(cfg_path):
    cfg = Config.fromfile(cfg_path)
    print('origin cfg', cfg.model.train_cfg)
    cfg2 = cfg.deepcopy()
    cfg2.model.train_cfg = None
    print('after altered cfg1', cfg.model.train_cfg)
    print('after altered cfg2', cfg2.model.train_cfg)





if __name__ == '__main__':
    cfg_path = r'../ROI Transformer/main_config.py'
    # test_cfg(r'../ROI Transformer/main_config.py')
    test_deepcopy(cfg_path)

copy测试结果

 

=(equal)测试结果

 

 deepcopy测试结果

 

posted @ 2022-10-12 10:26  Anm半夏  阅读(127)  评论(0编辑  收藏  举报