zoukankan      html  css  js  c++  java
  • python(7)——循环删除list、深拷贝和浅拷贝

       列表的内存自动管理功能,在删除列表中的元素时,python会自动对列表内存进行收缩,并移动列表中的元素以保证元素之间没有间隙,所以使用

          “循环+remove()方法”来删除列表中元素时会出现元素错位

    #删除list1中的奇数
    ist1=[1,1,1,2,3,4,5]
    
    for i in list1:
        if i%2!=0:
            list1.remove(i)
    print(list1)    #[1,2,4]
    若要正确循环删list中的元素,定义两个相同的list。一个list用于循环,从另一个list中删除
    import  copy
    list1=[1,1,1,2,3,4,5]
    list2=[1,1,1,2,3,4,5]
    
    for i in list2:
        if i%2!=0:
            list1.remove(i)
    
    print(list1)   #[2,4]

    浅拷贝

    #list2=list1 相当于 list2=list1.copy(),都是浅拷贝
    #list2和list1指向同一个内存地址,所以list1变了,list2也会变 ;同样不能达到正确删除list1中奇数的目的
    
    list1=[1,1,1,2,3,4,5]
    list2=list1             #浅拷贝   相当于 list1.copy()
    print(id(list1))     # 2270067237960   id()取内存地址
    print(id(list2))     # 2270067237960
    
    for i in list2:
        if i%2!=0:
            list1.remove(i)
    print(list1)        #[1,2,4]

    深拷贝

    # list2=copy.deepcopy(list1)   深拷贝,list1和list2指向不同的内存地址
    
    import  copy   #导入copy模块
    list1=[1,1,1,2,3,4,5]
    list2=copy.deepcopy(list1)  #深拷贝
    print(id(list1))     #2085723515720  id()取内存地址
    print(id(list2))     #2085723513928
    for i in list2:
        if i%2!=0:
            list1.remove(i)
    print(list1)      #[2,4]

    字符串的值是不能改变的,所以字符串和list情况不同

    1 a='cat'     #a中保存的是cat的内存地址
    2 b = a       #将a中保存的内存地址赋给b,a和b指向同一块内存地址
    3 a='dog'    #字符串的值是不能改变的,所以重新对a赋值会在分配一块内存给dog,a指向dog的内存地址
    4 print(a)    #dog
    5 print(b)    #ca
  • 相关阅读:
    实现第三方系统单点登录
    python爬虫
    webot设备motor的api
    webots学习
    python学习算术运算
    python快捷键与命令函数
    python学习构造和析构
    python学习对象相关的bif
    python学习对象:拾遗
    matlab基础知识
  • 原文地址:https://www.cnblogs.com/HathawayLee/p/9622526.html
Copyright © 2011-2022 走看看