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]))
  • 相关阅读:
    Git在AndroidStudio中的使用(一)
    自定义SiidingMenu简单实现
    圆形ImageView的简单实现
    使用PullToRefresh实现下拉刷新和上拉加载
    XMLpull解析使用
    Xutils简单使用
    友盟第三方登录和分享的使用
    ImageLoader简单使用
    Android中利用LinearLayout动态添加控件
    数据库两大神器【索引和锁】
  • 原文地址:https://www.cnblogs.com/weihengblog/p/8378811.html
Copyright © 2011-2022 走看看