zoukankan      html  css  js  c++  java
  • Python中的拷贝与深浅拷贝

    赋值

    即为赋值.举个例子

    a = 147147
    b = a # 赋值
    print(a is b) # True
    

    结论:对于通过用 = 号赋值,数字和字符串在内存当中用的都是同一块地址。

    浅拷贝

    对于浅拷贝,字典、列表、元组等类型,它们只拷贝第一层地址

    import copy
    
    n1 = {"k1": "wu", "k2": 123, "k3": ["alex", 678]}
    n3 = copy.copy(n1)  # 浅拷贝
    print("第一层字典的内存地址:")
    print(id(n1))
    print(id(n3))
    print("第二层嵌套的列表的内存地址:")
    print(id(n1["k3"]))
    print(id(n3["k3"]))
    

    结果

    第一层字典的内存地址:
    6516024
    6516096
    第二层嵌套的列表的内存地址:
    36995720
    36995720
    

    第一层的n1和n3指向的内存地址已经改变了,但是第二层的列表并没有拷贝成功,它的内存地址还是一样的,所以当n3第二层的列表进行修改的时候,n1里的列表也会被修改.

    原理如下

    深拷贝

    deepcopy

    import copy
    
    n1 = {"k1": "wu", "k2": 123, "k3": ["alex", 678]}
    n4 = copy.deepcopy(n1)  # 深拷贝
    print("第一层字典的内存地址:")
    print(id(n1))
    print(id(n4))
    print("第二层嵌套的列表的内存地址:")
    print(id(n1["k3"]))
    print(id(n4["k3"]))
    

    结果:

    第一层字典的内存地址:
    31157560
    35463600
    第二层嵌套的列表的内存地址:
    35947144
    35947336
    

    结论:内存地址都改变了,有几层嵌套就改变几层嵌套,很牛逼的一个拷贝,都是引用的n1的里面的值
    原理如下:

  • 相关阅读:
    走近Qt
    C: 数组形参
    C++: 单例模式和缺陷
    c++: 获取delete[]中的数组大小
    像素格式
    BMP图像格式
    Sublime Text 格式化JSON-pretty json
    Sublime Text3配置SublimeREPL快捷键的方法(Python)
    Sublime Text3安装SublimeREPL插件以及快捷键设置
    Sublime Text3 注册码激活码(持续更新中2018-11-20)
  • 原文地址:https://www.cnblogs.com/jhpy/p/12045253.html
Copyright © 2011-2022 走看看