• 深浅拷贝


    复制:赋值后完全一样,指向内存空间。

    l1 = [1,2,3,['barry','alex']]
    第一步:把l1赋值给l2 l2
    = l1 第二步:修改l1的索引值
    查看l1、l2的值,现象是完全一致 l1[0]
    = 111 print(l1) # [111, 2, 3, ['barry', 'alex']] print(l2) # [111, 2, 3, ['barry', 'alex']] 第三步:修改l1第二层的值
      值仍然相同 l1[
    3][0] = 'wusir' print(l1) # [111, 2, 3, ['wusir', 'alex']] print(l2) # [111, 2, 3, ['wusir', 'alex']]
    结论:赋值是内存指向变量,所以值是相同的


    浅拷贝:嵌套型数据类型第一层拷贝后是完全是两份,改变其中一个

    l1 = [1,2,3,['barry','alex']]

      第一步:拷贝l1赋值给l2 l2 = l1.copy()
    查看l1与l2的内存地址
    现象是l1与l2是完全不一样的两份 print(l1,id(l1)) # [1, 2, 3, ['barry', 'alex']] 2380296895816 print(l2,id(l2)) # [1, 2, 3, ['barry', 'alex']] 2380296895048
    第二步:修改第一层的数据
    现象:内存地址仍然是两份完全不同的 l1[1] = 222 print(l1,id(l1)) # [1, 222, 3, ['barry', 'alex']] 2593038941128 print(l2,id(l2)) # [1, 2, 3, ['barry', 'alex']] 2593038941896 第三步:修改内层数据
    现象:修改后内存地址仍然一致 l1[3][0] = 'wusir' print(l1,id(l1[3])) # [1, 2, 3, ['wusir', 'alex']] 1732315659016 print(l2,id(l2[3])) # [1, 2, 3, ['wusir', 'alex']] 1732315659016
    现象:浅拷贝后修改第一层内存地址不同,修改第二层内存地址相同


    深拷贝:拷贝后无论多少层都一样

    import copy
    l1 = [1,2,3,['barry','alex']]
    第一步l1深拷贝赋值给l2 l2
    = copy.deepcopy(l1) 第二步:查看l1与l2的id值 print(l1,id(l1)) # [1, 2, 3, ['barry', 'alex']] 2915377167816 print(l2,id(l2)) # [1, 2, 3, ['barry', 'alex']] 2915377167048 第三步:修改第一层的数据
    现象:内存地址不一样 l1[
    1] = 222 print(l1,id(l1)) # [1, 222, 3, ['barry', 'alex']] 2915377167816 print(l2,id(l2)) # [1, 2, 3, ['barry', 'alex']] 2915377167048 第四步:修改内层数据
    现象:内存地址仍然不同 l1[
    3][0] = 'wusir' print(l1,id(l1[3])) # [1, 222, 3, ['wusir', 'alex']] 2915377167240 print(l2,id(l2[3])) # [1, 2, 3, ['barry', 'alex']] 2915377167304
    结论:深拷贝拷贝后内存地址是完全不同的两份数据,无论修改几层嵌套内存地址都是完全不同的
  • 相关阅读:
    SQL 日常练习 (十八)
    SQL 日常练习 (十七)
    SQL 日常练习 (十六)
    SQL 日常练习(十五)
    SQL 日常练习 (十四)
    Join 实现 2 表数据联动
    SQL 强化练习 (十三)
    SQL 强化练习 (十二)
    SQL 强化练习 (十一)
    SAP B1:水晶报表中用Code128制作条型码的方法
  • 原文地址:https://www.cnblogs.com/wanghuaqiang/p/8987644.html
Copyright © 2020-2023  润新知