基础数据类型相关知识点补充和深浅拷贝

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. 为什么要使用深浅拷贝?

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

猜你喜欢

转载自www.cnblogs.com/knowledgeYang/p/9289968.html
今日推荐