zoukankan      html  css  js  c++  java
  • 三、深浅拷贝

    1. 整型、字符串和布尔类型的深浅拷贝

    import copy
    a = 'Aaron'
    b = copy.copy(a)  # 浅拷贝
    c = copy.deepcopy(a)  # 深拷贝
    
    # 注意:对于简单的不可变类型(int、str、bool),浅拷贝和深拷贝是一样的。
    

    2. 列表、集合和字典的深浅拷贝

    import copy
    a = [1, 2, [3, 4], 5]
    b = copy.copy(a)  # 浅拷贝,只是将a的最外层地址拷贝一份。
    c = copy.deepcopy(a)  # 深拷贝,将a的地址和它包含的所有可变类型的地址都拷贝一份(此处就拷贝了a的地址和其中元素[3, 4]的地址。
    
    print(id(a), id(b), id(c))
    print('==='*15)
    print(id(a[1]), id(b[1]), id(c[1]))
    print('==='*15)
    print(id(a[2]), id(b[2]), id(c[2]))
    
    # 输出结果
    66748936 66921096 66921160
    =============================================
    8790802010976 8790802010976 8790802010976
    =============================================
    66823752 66823752 66920840
    

    3. 元组的深浅拷贝

    import copy
    
    print('元组元素包含可变类型:
    ')
    a1 = (1, 2, [3, 4], 5)
    b1 = copy.copy(a1)  # 浅拷贝,和a原来的地址一样,不进行拷贝。
    c1 = copy.deepcopy(a1)  # 深拷贝,a的元素包含可变类型,将a的地址和它包含的所有可变类型的地址都拷贝一份(此处就拷贝了a的地址和其中元素[3, 4]的地址。
    
    print(id(a1), id(b1), id(c1))
    print('==='*15)
    print(id(a1[1]), id(b1[1]), id(c1[1]))
    print('==='*15)
    print(id(a1[2]), id(b1[2]), id(c1[2]))
    
    print('
    元组元素不包含可变类型:
    ')
    a2 = (1, 2, 3, 4, 5)
    b2 = copy.copy(a2)  # 浅拷贝,和a原来的地址一样,不进行拷贝。
    c2 = copy.deepcopy(a2)  # 深拷贝,a的元素为不可变类型,和a原来的地址一样,不进行拷贝。
    
    print(id(a2), id(b2), id(c2))
    print('==='*15)
    print(id(a2[1]), id(b2[1]), id(c2[1]))
    print('==='*15)
    print(id(a2[2]), id(b2[2]), id(c2[2]))
    
    
    # 输出结果
    元组元素包含可变类型:
    
    57627496 57627496 57981672
    =============================================
    8790802010976 8790802010976 8790802010976
    =============================================
    66627464 66627464 66724552
    
    元组元素不包含可变类型:
    
    57697824 57697824 57697824
    =============================================
    8790802010976 8790802010976 8790802010976
    =============================================
    8790802011008 8790802011008 8790802011008
    
  • 相关阅读:
    html5学习笔记
    J-Link eclipse Plug-ins install
    SEGGER J-Link install
    如何使用Redis实现分布式锁?
    在Redis里,如何从海量key中查询出某一个固定前缀所有的key?
    (必问)Redis有哪些常用数据类型?
    (必问)Http和Https的区别有哪些?
    Https的传输流程是什么?
    Cookie和Session有什么区别?
    HTTP的状态码有哪些?
  • 原文地址:https://www.cnblogs.com/aaron-zhou/p/11780076.html
Copyright © 2011-2022 走看看