zoukankan      html  css  js  c++  java
  • 深拷贝浅拷贝

    问题:

    l = [0, 1, 2,2, 3, 4, 5]
    for i in l:
         if i % 2 == 0:
             l.remove(i)
     print(l) # [1,2,3,5]

    原因:删除的过程中下标变了

    解决:

    l = [0, 1, 2,2, 3, 4, 5]
    l2 = [0, 1, 2,2, 3, 4, 5] 
    for i in l2:
         if i % 2 == 0:
             l.remove(i)
     print(l) # [1,3,5]

    不知道list是什么内容的情况下,无法复制,需要怎么操作。l2=l  是不可行的。

    l = [0, 1, 2,2, 3, 4, 5]
    l2 = l # 浅拷贝
    print(id(l))
    print(id(l2))
    for i in l2:
         if i % 2 == 0:
             l.remove(i)
     print(l) # [1,2,3,5]

    导入copy模块。

    l = [0, 1, 2,2, 3, 4, 5]
    l2 =  copy.deepcopy(l)#深拷贝
    print(id(l)) # 内存地址
    print(id(l2))
    for i in l2:
         if i % 2 == 0:
             l.remove(i)
     print(l) # [1,3,5]
    l = [ 1,2,3,[4,5,6] ]
    # l2 = l.copy()
    # l2 = copy.copy(l)
    
    l2 = l[:]
    
    print(id(l))
    print(id(l2))
    l[-1].append('abc')
    print(l)
    print(l2)

    浅拷贝/深拷贝 #如果复制了一个变量,这两个变量其中一个变了之后,不应该影响另外一个的情况下,就要用深拷贝

  • 相关阅读:
    Linux安装.net core
    在IIS中如何配置SSL(https)
    Lambda的前世今生
    Java建造者模式
    leetcode 83 Remove Duplicates from Sorted List
    【设计】Office
    【设计】简书品牌重构
    【设计总结】
    【交互设计】
    【设计总结】
  • 原文地址:https://www.cnblogs.com/Noul/p/15019940.html
Copyright © 2011-2022 走看看