zoukankan      html  css  js  c++  java
  • 深浅copy

    赋值运算

    l1 = [1,2,3,[22,33]]
    l2 = l1
    l1.append('666')
    
    print(l1)
    print(l2)

     

    浅copy

    1 l1 = [1,2,3,[22,33]]
    2 l3 = l1.copy()           #新开辟了一个空间,存放的是对l1 copy出来的列表,内含l1内元素
    3 l1.append('666')         #l1新增元素不在开辟的空间中
    4 l1[-2].append('777')
    5 l1[0] = 90             #l1列表的槽位指向了其他的对象,并不会改变copy列表中的对象
    6 
    #l1原元素存放在copy列表中,l1和l3槽位均指向copy出来的列表中的对象内存地址,所以l1和l3的id不同,但是l1和l3内容的id相同 7 print(l3) #[1, 2, 3, [22, 33, '777']] 8 9 print(l1) #[90, 2, 3, [22, 33, '777'], '666']

     

    深copy

     

     1 import copy
     2 
     3 l1 = [1,2,3,[22,33]]
     4 l2 = copy.deepcopy(l1)
     5 #python对深copy做了优化,将copy列表中,不可变数据类型沿用copy列表,可变数据类型新创建一个(不同id)
     6 
     7 l1.append('666')
     8 l1[-1].append(90)
     9 
    10 print(l1) #[1, 2, 3, [22, 33, 90]]
    11 print(l2) #[1, 2, 3, [22, 33]]

     

     

     总结

    深copy会在内存中开辟新空间,将原列表以及列表里面的可变的数据类型重新创建一份,不可变的数据类型则沿用之前的

    相关面试题

    l1 = [1,2,3,[22,33]]
    l2 = l1[:] #切片为浅copy l1[-1].append('66') print(l1) #[1, 2, 3, [22, 33, 90, '66']]  print(l2) #[1, 2, 3, [22, 33, 90, '66']]
  • 相关阅读:
    Sqlite基础(一)
    个人作业冲刺(四)
    安卓用户名密码操作及虚拟机问题
    安卓之界面跳转
    个人作业冲刺(三)
    个人作业冲刺(二)
    个人作业冲刺(一)
    Android studio RatingBar(星级评分条)
    阅读笔记——《构建之法》4
    Android studio GridLayout(网格布局)
  • 原文地址:https://www.cnblogs.com/zyiy/p/12521400.html
Copyright © 2011-2022 走看看