• 十七、深浅copy


    深浅copy(面试会考,给代码,写结果)

    • 浅copy:list dict:嵌套的可变数据类型是同一个

    • 深copy:list dict:嵌套的可变数据类型不是同一个

    • python对深copy做了一个优化,将不可变的数据类型沿用同一个


    # 赋值运算
    l1 = [1, 2, 3, [22, 33]]
    l2 = l1
    l1.append(666)
    print(l1)   #[1, 2, 3, [22, 33], 666]
    print(l2)   #[1, 2, 3, [22, 33], 666]

    # 浅copy
    l1 = [1, 2, 3, [22, 33]]
    l2 = l1.copy()
    l1.append(666)
    print(l1,id(l1))    #[1, 2, 3, [22, 33], 666] 2636121985672
    print(l2,id(l2))    #[1, 2, 3, [22, 33]] 2636122977992

    l1 = [1, 2, 3, [22, 33]]
    l2 = l1.copy()
    l1[-1].append(666)
    print(id(l1[-1]))    #2769458001672
    print(id(l2[-1]))    #2769458001672
    print(id(l1[0]))     #1785949200
    print(id(l2[0]))     #1785949200
    print(l1)            #[1, 2, 3, [22, 33, 666]]
    print(l2)            #[1, 2, 3, [22, 33, 666]]

    l1 = [1, 2, 3, [22, 33]]
    l2 = l1.copy()
    l1[0] = 90
    print(l1)    #[90, 2, 3, [22, 33]]
    print(l2)    #[1, 2, 3, [22, 33]]

    # 深copy
    import copy
    l1 = [1, 2, 3, [22, 33]]
    l2 = copy.deepcopy(l1)
    print(id(l1))    #2258605313352
    print(id(l2))    #2258605615048
    l1[-1].append(666)
    print(l1)        #[1, 2, 3, [22, 33, 666]]
    print(l2)        #[1, 2, 3, [22, 33]]

    # 相关面试题;
    l1 = [1, 2, 3, [22, 33]]
    l2 = l1[:]
    l1[-1].append(666)
    print(l1)         #[1, 2, 3, [22, 33, 666]]
    print(l2)         #[1, 2, 3, [22, 33, 666]]

    深浅copy:

    • 浅copy:在内存中开辟一个新的空间存放copy的对象(列表,字典),但是里面所有的元素与被copy对象的里面的元素共用一个

    • 深copy:不可变的数据类型沿用之前的,可变的数据类型创建新的

  • 相关阅读:
    优达,计算机科学导论
    关于未来发展阶段小结
    CS50.5
    CS50.4
    简单查看tomcat中部署java服务的内存使用情况
    python3环境搭建(CentOS7.2)
    mysql主从配置脚本
    安装rkhunter
    转移到博客园啦!
    Eclipse上Maven环境配置使用 (全)
  • 原文地址:https://www.cnblogs.com/yangzm/p/10859764.html
Copyright © 2020-2023  润新知