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

    今日只要学习了

    一. 基础数据类型的补充

    二 ..深浅拷贝

    一 . 主要内容:

    之前讲的int 跟 str 已经讲过了80%的内容 接下来说剩下的:

     1 .join 

    join与之前的spilt 作用是相反的.  join 是将列表中的数据通过操作变成字符串 . 而split是通过字符串的切割将字符串变成列表 .

    具体用法:  如 :li = ["李嘉诚", "麻花藤", "?海峰", "刘嘉玲"]

           li1=' _ ' .join(li)

          print( li1 )   结果为''李嘉诚_麻花藤_?海峰_刘嘉玲''

    由此我们可以看出join是将原来的列表类型变成了一个字符串

    对比split :

     str = "李嘉诚,麻花藤,?海峰,刘嘉玲"

    str1=str.split(" ,")

    print(str1)   结果为 ['李嘉诚','麻花藤','?海峰','刘嘉玲']

    我们可以看到这里的split是将之前的字符串形式变成了列表的形式

    列表: 

    循环删除列表中的每一个元素.

    li = [11, 22, 33, 44]
    for e in li:
      li.remove(e)
      print(li)
    结果:
    [22, 44]

    这里的原因是 for 在循环的过程中 ,会有一个指针记录当前循环的元素是哪一个,一开始这个元素的指向是第0个,然后执行获取, 删除命令.当删除完第一个元素之后,之前第二个元素变成了第一个元素,索引改变了,但是指针指向了第二个元素,刚好错开了. 如果用pop删除系统会报错,只有这样才是可以的.

    for el in range(len(li)):

    li.pop()  # 这里默认删除的是最后一个   或者是  li.pop[0]  #删除第一个元素

    这里我们要讲的办法是用另一个列表记录你要删除的内容 ,然后循环删除原来要删除的列表

      如: li = [11, 22, 33, 44]

    li1=[]

    for el in li:

      li1.append(el)

    for e in li1:

      li.remove(e)

    print(e)

    注意:  由于元素删除后会导致元素的索引改变,容易出现问题,所以不要在循环中直接去单楚楚元素.可以把要删除的元素放到另一个列表中去,通过另一个列表的循环删除原来列表中的元素

    dict 中可以通过fromkeys()来创建新的字典:

    dic=dict.fromkeys(['jay','jj'],['周杰伦','麻花藤'])

    print(dic)  结果 :{ 'jay' : ['周杰伦','麻花藤'] , ' jj ': ['周杰伦','麻花藤'] }

    关于fromkeys 的两个大坑:

    1,必须给前面赋值一个新的字典, 他返回的是新字典,与原字典无关.

    dic={}

    d=dic.fromkeys('张无极',[])

    print(d)  结果为{'张':[],'无':'[]','极':[]}

    2.如果value是可变的值.

    dic={}

    d=dic.fromkeys('张无极',[])

    dic['张']='呵呵'

    print(dic) 结果为{'张':[呵呵],'无':'[呵呵]','极':[呵呵]}

    原因: 这里的'张' '无' '极'用的是同一个[],如果其中一个改变了[]的值,其他的也会改变

    二 .深浅拷贝

    1 浅拷贝( 只拷贝第一层)  拷贝出来的内容不是之前的原内容,只是创建了一个和之前一样的 (此处可以联想的抄作业)

         lst1 = ["金毛狮王", "紫衫龙王", "白眉鹰王", "青翼蝠王"]
       lst2 = lst1
      print(lst1)
      print(lst2)
      lst1.append("杨逍")
      print(lst1)
      print(lst2)
      结果:
      ["金毛狮王", "紫衫龙王", "白眉鹰王", "青翼蝠王" '杨逍']
      ["金毛狮王", "紫衫龙王", "白眉鹰王", "青翼蝠王", '杨逍']

    2. 深拷贝 对象的所有内容都要复制 

    from copy

    lst2=copy.deepcopy(lst1)

    这里的lst2就是深拷贝了lst1 中的所有内容,不会产生一个改变另一个跟着

    改变的问题

  • 相关阅读:
    JAVA 字符处理
    android:visibility 隐藏 可见 不可见
    Android中 int 和 String 互相转换的多种方法
    日期月和日补零
    【程序】程序报错 error:-1610149839 等大负数
    【IE】将IE11改为64位
    【linux】CentOS网络配置
    【linux】CentOS虚拟机eth0 提示Device does not seem to be present
    【SUSE】关闭防火墙
    【走马观花】十月八日通州雾
  • 原文地址:https://www.cnblogs.com/zty1304368100/p/10064626.html
Copyright © 2011-2022 走看看