zoukankan      html  css  js  c++  java
  • 【python】基础数据类型相关知识点补充和深浅拷贝

    1. str.join(element)  把字符串插入到元素当中去

    s = "abc"
    s1 = s.join("非常可乐") 
    print(s1)

    >>>运行结果: 非abc常abc可abc乐

      join()方法可以将列表变成字符串,相当于反过来的.split()方法

    s = "_".join(["alex", "wuse", "taibai", "ritian"]) 
    print(s)

    >>>运行结果: alex_wuse_taibai_ritian

    2.  列表不能在迭代循环过程中删除元素,字典也不行,因为在循环过程中如果进行删除或者增加操作,会改变索引,引发报错

      解决办法: 把要删除或者新增的内容记录在列表中,循环列表,根据列表删除或者新增原列表,字典中的数据

    lst = ["周杰伦", "周润发", "周星星", "马化腾", "周树人"]
    del_lst = []
    for el in lst:
        if el.startswith(""):
            del_lst.append(el)
    
    for el in del_lst:
        lst.remove(el)
    print(lst)

    >>>运行结果: ['马化腾']

    3. dict.fromkeys()方法,产生新字典,不会对原来字典造成影响

    a = dict.fromkeys(["jj", 'jay', 'eason'], "牛逼")  
    print(a)
    >>>输出结果: {'jj': '牛逼', 'jay': '牛逼', 'eason': '牛逼'}
    
    dic
    = {"a":"123"} s = dic.fromkeys("王健林", "思聪" ) print(s) >>>输出结果: {'': '思聪', '': '思聪', '': '思聪'}

    4. set()集合

      set()集合相当于字典,不过里边只有key.se()集合是不可哈希的,但里边是可哈希的.

      frozenset()方法可以将set集合冻结,就是将set()集合变成了可哈希的

      set()集合特点: 元素不重复,无序

    5. 深浅拷贝

      1. 理解赋值操作

    lst1 = ["金毛狮王", "紫衫龙王", "白眉鹰王", "青衣服往"]
    lst2 = lst1 # 列表, 进行赋值操作. 实际上是引用内存地址的赋值. 内存中此时只有一个列表. 两个变量指向一个列表
    
    lst2.append("杨做事")  # 对期中的一个进行操作. 两个都跟着变
    print(lst2)
    print(lst1)
    
    >>>lst2 = ['金毛狮王', '紫衫龙王', '白眉鹰王', '青衣服往', '杨做事']
    >>>lst1 = ['金毛狮王', '紫衫龙王', '白眉鹰王', '青衣服往', '杨做事']

      看一下图解:

      

      我们在把lst1赋值给lst2时候其实已经连同lst1的内存地址一起给了lst2

      所以对lst2进行修改之后,lst1的内容也同样被改变了

      2.浅拷贝

    lst1 = ["超人", "七龙珠", "葫芦娃", "山中小猎人", ["金城武", "王力宏", "渣渣辉"]]
    lst2 = lst1.copy() 
    lst1[4].append("大阳哥")
    print(lst1, lst2)
    
    >>>lst1 = ['超人', '七龙珠', '葫芦娃', '山中小猎人', ['金城武', '王力宏', '渣渣辉', '大阳哥']]
    >>>lst2 = ['超人', '七龙珠', '葫芦娃', '山中小猎人', ['金城武', '王力宏', '渣渣辉', '大阳哥']]

      看一下图解:

      浅拷贝只是拷贝第一层内容,实际上双方的内存地址还是一样的,改变其中一个的值,另一个会随之一起改变

      3. 深拷贝

      深拷贝要借助于import copy

    import copy
    lst1 = ["超人", "七龙珠", "葫芦娃", "山中小猎人", ["金城武", "王力宏", "渣渣辉"]]
    lst2 = copy.deepcopy(lst1)  
    lst1[4].append("大阳哥")
    print(lst1, lst2)
    
    >>>lst1 = ['超人', '七龙珠', '葫芦娃', '山中小猎人', ['金城武', '王力宏', '渣渣辉', '大阳哥']]
    >>>lst2 = ['超人', '七龙珠', '葫芦娃', '山中小猎人', ['金城武', '王力宏', '渣渣辉']]

      深拷贝与浅拷贝的区别就在于浅拷贝时内存地址并没有发生改变,而深拷贝相当于把lst1的全部内容拿出来重新放到另一个内存地址里

      lst1和lst2的内存地址不同,所以对lst1进行修改时,lst2就不受影响

      4. 为什么要使用深浅拷贝?

      因为拷贝比直接创建对象快速的多,能够更加的节省时间

  • 相关阅读:
    异常总结201304
    Android开发资料[20121125]
    大素数的生成
    django 获取用户IP地址
    python包管理工具pip
    mysql大表修改结构
    素数的检测
    一致性哈希算法 python实现
    素数的生成筛选法
    相似哈希simhash
  • 原文地址:https://www.cnblogs.com/knowledgeYang/p/9289968.html
Copyright © 2011-2022 走看看