• python中深copy,浅copy


    1. >>> mylist1 = [1, 2, 3, 4]  
    2. >>> myl = mylist1  
    3. >>> myl  
    4. [1, 2, 3, 4]  
    5. >>> mylist1[0] = 5  
    6. >>> mylist1  
    7. [5, 2, 3, 4]  
    8. >>> myl  
    9. [5, 2, 3, 4]  
    >>> mylist1 = [1, 2, 3, 4]
    >>> myl = mylist1
    >>> myl
    [1, 2, 3, 4]
    >>> mylist1[0] = 5
    >>> mylist1
    [5, 2, 3, 4]
    >>> myl
    [5, 2, 3, 4]

    这个就是浅复制

    浅复制仅仅只是复制了对对象的引用,即 mylist1 和 myl 指向的是同一个对象,所以如果改变了该对象的元素的话,则 mylist1 和 myl 所指向的对象都会改变,因为实际上就是同一个对象

    1. >>> id(mylist1)  
    2. 202009976  
    3. >>> id(myl)  
    4. 202009976  
    >>> id(mylist1)
    202009976
    >>> id(myl)
    202009976
    可以看出两者指向的对象在内存中的地址是相同的,即是同一个对象
    1. >>> import copy  
    2. >>> mylist2 = [5, 6, 7, 8]  
    3. >>> myl2 = copy.deepcopy(mylist2)  
    4. >>> mylist2[0] = 9  
    5. >>> mylist2  
    6. [9, 6, 7, 8]  
    7. >>> myl2  
    8. [5, 6, 7, 8]  
    >>> import copy
    >>> mylist2 = [5, 6, 7, 8]
    >>> myl2 = copy.deepcopy(mylist2)
    >>> mylist2[0] = 9
    >>> mylist2
    [9, 6, 7, 8]
    >>> myl2
    [5, 6, 7, 8]
    这个就是深复制
    1. >>> id(mylist2)  
    2. 200662512  
    3. >>> id(myl2)  
    4. 202007336  
    >>> id(mylist2)
    200662512
    >>> id(myl2)
    202007336
    而深复制后的两个变量则指向的是两个不同的对象,可以把这两个对象理解为张得一模一样的双胞胎,虽然很像,但实际上是两个不同的人,所以其中一个人发生了改变(如受伤了)也不会影响到另一个人
    1. >>> id(mylist3[0])  
    2. 30909144  
    3. >>> id(myl3[0])  
    4. 30909144  
    5. >>> id(mylist3[3])  
    6. 200634696  
    7. >>> id(myl3[3])  
    8. 202008136  
    9. >>> mylist3 = [1, "a", 3, [4, 5, 6], [[7, 8, 9]]]  
    10. >>> myl3 = copy.deepcopy(mylist3)  
    11. >>> id(mylist3[1])  
    12. 31110016  
    13. >>> id(myl3[1])  
    14. 31110016  
    >>> id(mylist3[0])
    30909144
    >>> id(myl3[0])
    30909144
    >>> id(mylist3[3])
    200634696
    >>> id(myl3[3])
    202008136
    >>> mylist3 = [1, "a", 3, [4, 5, 6], [[7, 8, 9]]]
    >>> myl3 = copy.deepcopy(mylist3)
    >>> id(mylist3[1])
    31110016
    >>> id(myl3[1])
    31110016
    但是如果 mylist3 和 myl3 的元素指向的是同一个 『不可变』 的对象时,则 他们指向的仍然是同一个对象, 如 1 和 "a"
  • 相关阅读:
    调用Win32 API netapi32.dll 实现UNC(网络共享)连接的管理(一)
    一个重写Page基类的例子
    36进制进位算法例子
    关于.net 中调用script的alert后 css失效的办法
    Javascript:keyCode键码值表
    Url地址重写,利用HttpHander手工编译页面并按需生成静态HTML文件
    在.NET程序中正确使用String类型
    Sql Server中自动序号的方法
    托管和非托管的关系和区别
    Oracle 格式化
  • 原文地址:https://www.cnblogs.com/momo8238/p/7191686.html
Copyright © 2020-2023  润新知