• 浅copy与深copy


    浅copy

    实现浅copy的几种方式:

    1 import copy
    2 
    3 name1=['Liyunlong',['alex','Tony'],'Xuliucheng']
    4 
    5 name2=copy.copy(name1)
    6 name2=name1[:]
    7 name2=name1.copy()

    实现深copy的方式:

    1 import copy
    2 
    3 name1=['Liyunlong',['alex','Tony'],'Xuliucheng']
    4 
    5 name2=copy.deepcopy(names) #注意copy.copy()依旧是浅copy

    区别:

    浅copy:复制列表是只是被复制列表的引用,只copy第一层,第二层copy内存地址

    深copy:独立复制一份,复制列表与被复制列表无关

    例如:

    浅copy之后更改列表第一层和第二层:

    1 import copy
    2 
    3 name1=['Liyunlong',['alex','Tony'],'Xuliucheng']
    4 
    5 name2=copy.copy(name1)
    6 name1[0]='Zhaogang'
    7 name2[1][0]='James Tao'
    8 print(name1)
    9 print(name2)

    浅copy结果:

    深copy之后更改列表第一层和第二层:

    1 import copy
    2 
    3 name1=['Liyunlong',['alex','Tony'],'Xuliucheng']
    4 
    5 name2=copy.deepcopy(name1)
    6 name1[0]='Zhaogang'
    7 name2[1][0]='James Tao'
    8 print(name1)
    9 print(name2)

    深copy结果:

    另外,使用等号复制列表相当于copy了前列表的全部地址:

    1 name1=['Liyunlong',['alex','Tony'],'Xuliucheng']
    2 
    3 name2=name1
    4 name1[0]='Zhaogang'
    5 name2[1][0]='James Tao'
    6 print(name1)
    7 print(name2)

    结果为:

  • 相关阅读:
    CCF NOI1079 合法C标识符
    CCF NOI1080 统计字符
    CCF NOI1076 进制转换
    CCF NOI1065 最小公倍数
    CCF NOI1139 高精度减法
    CCF NOI1138 高精度加法
    CCF NOI1115 找数
    CCF NOI1097 数列
    CCF NOI1089 高精度运算
    NUC1931 Problem D 区间素数【素数筛选】
  • 原文地址:https://www.cnblogs.com/BIT-taozhen/p/9744510.html
Copyright © 2020-2023  润新知