• python中深拷贝和浅拷贝


    # copy.copy 和copy.deepcopy都需要引用copy模块

    1 import copy
    2 # 对于不可变类型(数值,元组,字符串),浅拷贝和深拷贝一样,内存地址都是一样的
    3 a = 2
    4 a2 = copy.copy(a)
    5 a3 = copy.deepcopy(a)
    6 print('a的内存地址是%s: '% id(a))
    7 print('a2的内存地址是%s: '% id(a2))
    8 print('a3的内存地址是%s: '% id(a3))
    1 C:ProgramDataAnaconda3python.exe E:/cnz/day2/深拷贝浅拷贝.py
    2 a的内存地址是8791395856160: 
    3 a2的内存地址是8791395856160: 
    4 a3的内存地址是8791395856160: 

    # 对于可变类型(列表,字典),分两种情况

     1 # 列表或者字典没有嵌套的情况下,浅拷贝和深拷贝内存地址与原对象都是不一样的,改变浅拷贝的值,不会影响原来的值
     2 li = [1,2,3]
     3 li2 = copy.copy(li)
     4 li3 = copy.deepcopy(li)
     5 print('li 的内存地址是%s: ' % id(li))
     6 print('li2 的内存地址是%s: ' % id(li2))
     7 print('li3 的内存地址是%s: ' % id(li3))
     8 
     9 # 改变li2的值
    10 li2[0] = 4
    11 print(li)
    12 print(li2)
    13 print(li3)
    1 li 的内存地址是43566728: 
    2 li2 的内存地址是43565704: 
    3 li3 的内存地址是43634632: 
    4 [1, 2, 3]
    5 [4, 2, 3]
    6 [1, 2, 3]
     1 # 列表中嵌套列表的情况,如果改变外层列表,浅拷贝的值不会变,如果改变原内层列表的值,浅拷贝的内层列表值也会改变,以为内层列表的内存地址是一样的
     2 
     3 l = [1,2,[1,2]]
     4 l2 = copy.copy(l)
     5 l3 =copy.deepcopy(l)
     6 print('l的内存地址是%s: '% id(l))
     7 print('l2的内存地址是%s: '% id(l2))
     8 print('l3的内存地址是%s: '% id(l3))
     9 l[2][0] = 3
    10 print('l是%s' % l)
    11 print('l2是%s' % l2)
    12 print('l3是%s' % l3)
    1 l的内存地址是43634504: 
    2 l2的内存地址是43634568: 
    3 l3的内存地址是43610184: 
    4 l是[1, 2, [3, 2]]
    5 l2是[1, 2, [3, 2]]
    6 l3是[1, 2, [1, 2]]
  • 相关阅读:
    halcon 图像控件显示闪烁问题
    halcon中的面向对象,数据保存
    halcon图像合并(贴图到指定位置)
    如何快速创建Html头文件
    海康威视频监控设备Web查看系统(三):Web篇
    海康威视频监控设备Web查看系统(二):服务器篇
    海康威视频监控设备Web查看系统(一):概要篇
    求2个数的最小公倍数和最大公约数
    .NETCore3.0应用程序部署到CentOS7
    [转]Android Studio 1.3.1环境搭建
  • 原文地址:https://www.cnblogs.com/hujc/p/11919800.html
Copyright © 2020-2023  润新知