Python中的 set 与 深浅拷贝

字符串

join()

格式:   "拼接的东西".join(可迭代对象)

可以加列表转换成字符串

1 lis = ['a','b','c','d']
2 s = "//".join(lis)
3 print(s)
4 
5 #结果
6 a//b//c//d

相反

split()   可以加字符串转换成列表       切割

列表和字典在循环的时候不能直接被删除
需要把要删除的内容记录在新的列表中

然后循环新列表,删除字典或列表

例如

lis = ['a','b','c','d','e']
for i in lis:
    lis.remove(i)
print(lis)    # 删除不完
lis1 = []
for i in lis:
    lis1.append(i)   #创建新列表
for a in lis1:
    lis.remove(a)   #删除旧列表
print(lis)

字典也同上

总结  :       字典和列表都不能在循环的时候进行删除,      字典在循环的时候不允许改变大小

集合

特点  :   无序的  不重复     元素必须可哈希(不可变)

作用 :    去重复

1 s = [1,2,3,1,3,4,5,3,5,6,1,77,78,1,8,3,5,6,9,9,99]
2 a = set(s)
3 print(a)  #{1, 2, 3, 4, 5, 6, 99, 8, 9, 77, 78}   去重复
s = list(a)

本身是可变的数据类型,  有增删改查的操作
增  删

s = {'','lx','',}
a =  s.pop()  #随机删除
a = s.add("")  #添加
s.remove('')  #删除
s.update("ndsad")  #迭代添加
print(s)

frozensent()  冻结的集合

set  集合本身是可以改变的  是不可哈希的  我们可以使用frozenset来保存数据,

frozensent是不可改变的也就是一个可哈希的类型

 

深浅拷贝

重点

 1  赋值   没有创建对象,  公用一个对象
 2  浅拷贝,拷贝第一层内容,[:]或copy()

3 深拷贝,  拷贝所有内容包括内部所有   引入copy模块,deepcopy()

4  引用    import

1 import copy  # 引用copy 模块
2 lst = ["赵云",'马可波罗','猴子','孙尚香','公孙离',["吕布",'干将','貂蝉']]
3 lst1 = lst[:]  #浅拷贝
4 lst2 = lst.copy()  #浅拷贝
5 lst3 = copy.deepcopy(lst)  #深拷贝

 

 重点

一个面试题   

循环引用      官方文档有写

a = [1,2]
a[1] = a
print(a[1])

 

posted @ 2018-08-03 17:14  heshun  阅读(187)  评论(0编辑  收藏  举报