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

    一、循环列表,删除其中的元素

    l1 = [1,2,3,4,5,6,7]  循环删除奇数位元素

    1.正序循环删除,会出现越界情况,所以采用倒叙的方式删除

    1 l1 = [1,2,3,4,5,6,7]
    2 for i in range(len(l1) - 1,-1,-1):
    3     if i % 2 == 1:
    4         l1.pop(l1[i])
    5 
    6 print(l1)

    二、循环字典,删除其中的元素

    如果循环删除的话,编译器会报  RuntimeError: dictionary changed size during iteration

    1 #错误代码
    2 #dic = {'k1':'zhangsan','k2':'lisi','k3':'wangwu','name':'xiaoming'}  删除带k的key
    3 dic = {'k1':'zhangsan','k2':'lisi','k3':'wangwu','name':'xiaoming'}
    4 
    5 for i in dic:
    6     if 'k' in i:
    7         del dic[i]
    8 
    9 print(dic)

    真确的方式,是把key放到一个列表中,然后根据列表元素进行删除

     1 #正确的代码
     2 dic = {'k1':'zhangsan','k2':'lisi','k3':'wangwu','name':'xiaoming'}
     3 l1 = []
     4 for i in dic:
     5     if 'k' in i:
     6         l1.append(i)
     7 
     8 for i in l1:
     9     del dic[i]
    10 
    11 print(dic)

    三、深拷贝、浅拷贝

    浅拷贝

    3.1赋值就是指向同一块内存空间

    str是不可变类型,所以当修改的时候会替换旧的对象,产生一个新的地址。

    str1 = 'zhangsan'
    str2 = str1
    
    #两个地址相同
    str1 = 'lisi'  
    print(id(str1))
    print(id(str2))

    3.2列表拷贝

    l1 = [1,2,3,4]
    l2 = l1.copy()
    l1.append('5')
    
    print(l1,id(l1))
    print(l2,id(l2))

     3.3列表嵌套拷贝

    l1 = [1,2,[44,55,66],3,4]
    l2 = l1.copy()
    l1[2].append('5')
    
    print(l1,id(l1))
    print(l2,id(l2))

    对于浅拷贝,第一层是独立的内存块,从第二层嵌套开始,都是指向同一个内存地址,一变都变

    l1 = [1,2,[44,55,66],3,4]
    l2 = l1.copy()
    l1[2].append('5')
    
    print(l1,id(l1))
    print(l2,id(l2))
    print(l1,id(l1[2]))
    print(l2,id(l2[2]))

    深拷贝

    对于深拷贝来说,无论多少层,在内存中都是两个独立的内存块。

    import copy
    
    l1 = [1,2,[44,55,66],3,4]
    l2 = copy.deepcopy(l1)
    l1[2].append('5')
    
    print(l1,id(l1))
    print(l2,id(l2))
    print(l1,id(l1[2]))
    print(l2,id(l2[2]))
  • 相关阅读:
    NPM 重新回炉
    构建工具
    工作的环境部署
    Proxy 代理
    Promise 的 用法及实现
    JS 的 继承
    动态规划——LCS
    矩阵连乘——动态规划
    线段树&树状数组
    SpringAOP
  • 原文地址:https://www.cnblogs.com/weihengblog/p/8378811.html
Copyright © 2011-2022 走看看