zoukankan      html  css  js  c++  java
  • 深浅copy

    深浅copy

    1,先看赋值运算。

    复制代码
    l1 = [1,2,3,['barry','alex']]
    l2 = l1
    
    l1[0] = 111
    print(l1)  # [111, 2, 3, ['barry', 'alex']]
    print(l2)  # [111, 2, 3, ['barry', 'alex']]
    
    l1[3][0] = 'wusir'
    print(l1)  # [111, 2, 3, ['wusir', 'alex']]
    print(l2)  # [111, 2, 3, ['wusir', 'alex']]
    复制代码

    对于赋值运算来说,l1与l2指向的是同一个内存地址,所以他们是完全一样的。

    2,浅拷贝copy。

    复制代码
    #同一代码块下:
    l1 = [1, '太白', True, (1,2,3), [22, 33]]
    l2 = l1.copy()
    print(id(l1), id(l2))  # 2713214468360 2713214524680
    print(id(l1[-2]), id(l2[-2]))  # 2547618888008 2547618888008
    print(id(l1[-1]),id(l2[-1]))  # 2547620322952 2547620322952
    
    # 不同代码块下:
    >>> l1 = [1, '太白', True, (1, 2, 3), [22, 33]]
    >>> l2 = l1.copy()
    >>> print(id(l1), id(l2))
    1477183162120 1477183162696
    >>> print(id(l1[-2]), id(l2[-2]))
    1477181814032 1477181814032
    >>> print(id(l1[-1]), id(l2[-1]))
    1477183162504 1477183162504
    复制代码

    对于浅copy来说,只是在内存中重新创建了开辟了一个空间存放一个新列表,但是新列表中的元素与原列表中的元素是公用的。

    3,深拷贝deepcopy。

    复制代码
    # 同一代码块下
    import copy
    l1 = [1, 'alex', True, (1,2,3), [22, 33]]
    l2 = copy.deepcopy(l1)
    print(id(l1), id(l2))  # 2788324482440 2788324483016
    print(id(l1[0]),id(l2[0]))  # 1470562768 1470562768
    print(id(l1[-1]),id(l2[-1]))  # 2788324482632 2788324482696
    print(id(l1[-2]),id(l2[-2]))  # 2788323047752 2788323047752
    
    # 不同代码块下
    >>> import copy
    >>> l1 = [1, '太白', True, (1, 2, 3), [22, 33]]
    >>> l2 = copy.deepcopy(l1)
    >>> print(id(l1), id(l2))
    1477183162824 1477183162632
    >>> print(id(0), id(0))
    1470562736 1470562736
    >>> print(id(-2), id(-2))
    1470562672 1470562672
    >>> print(id(l1[-1]), id(l2[-1]))
    1477183162120 1477183162312
    复制代码

    对于深copy来说,列表是在内存中重新创建的,列表中可变的数据类型是重新创建的,列表中的不可变的数据类型是公用的。

  • 相关阅读:
    VC++:创建,调用Win32静态链接库
    VC++:创建,调用Win32动态链接库
    C++生成和解析XML文件
    C++实现16进制字符串转换成int整形值
    一个好隐蔽的C/C++代码bug
    【C++札记】标准模板库string
    Rabbitmq C++客户端 Rabbitmq Client
    C++:标准模板库map
    C++:标准模板库vector
    C++:标准模板库(STL)
  • 原文地址:https://www.cnblogs.com/mqxBlog/p/10181830.html
Copyright © 2011-2022 走看看