zoukankan      html  css  js  c++  java
  • Python学习日记(六) 浅深copy

    浅深copy即完全复制一份和部分复制一份

    浅深copy在列表数据量较大时不建议使用,比较消耗内存资源

    1.赋值运算

    l1 = [1,'s',[1,2,3]]
    l2 = l1
    print(id(l1),id(l2))    #34103880 34103880
    l1[2][1] = 'h'          
    print(id(l1),id(l2))    #34103880 34103880

    l1和l2指向的是相同的内存地址

    2.浅copy

    l1 = [1,'s',[4,5,6,'s','h']]
    l2 = l1.copy()
    print(id(l1),id((l2)))  #5988936 6475464
    print(id(l1[0]),id(l2[0]))  #8791394136912 8791394136912
    print(id(l1[2][0]),id(l2[2][0]))    #8791410914224 8791410914224

    浅copy即开辟一个新的内存空间放一个新的列表,但是里面的元素两边都是公用的

    3.深copy

    import copy
    l1 = [1,'s',False,(2,3,4),{1,2,3},['a','b']]
    l2 = copy.deepcopy((l1))
    print(id(l1),id(l2))    #42180488 42179272
    print(l1,l2)
    #不可变数据类型
    print(id(l1[0]),id(l2[0]))  #8791394136912 8791394136912
    print(id(l1[1]),id(l2[1]))  #37970136 37970136
    print(id(l1[2]),id(l2[2]))  #8791410383216 8791410383216
    print(id(l1[3]),id(l2[3]))  #39259880 39259880
    #可变数据类型
    print(id(l1[4]),id(l2[4]))  #42293064 42293512
    print(id(l1[5]),id(l2[5]))  #42685064 42685192

    深copy是开辟一个新的列表内存空间,当列表中有不可变数据类型的元素时则与原列表共用,当列表有可变数据类型的元素时则会重新创建一个内存地址

    面试题:

    l1 = [1, 2, 3, 4, ['alex']]
    l2 = l1[::]
    l1[-1].append(666)  
    print(l2)  #[1, 2, 3, 4, ['alex', 666]]
  • 相关阅读:
    线程池原理和实现
    线程
    ajax、xstream、json
    上传、下载、javamail
    过滤器
    监听器、国际化
    jsp、javabean、el
    jstl、标签
    jsp、cookie、httpsession
    个人觉得比较好用的chrome插件
  • 原文地址:https://www.cnblogs.com/Fantac/p/11278736.html
Copyright © 2011-2022 走看看