集合set和深浅拷贝

 

1.set中的元素是不重复的.无序的.里面的元素必须是可hash的(int, str, tuple,bool), 我们可以这样来记. set就是dict类型的数据,但是不保存value, 只保存key. set也用{}表示

特点:
无序, 不重复, 元素必须可哈希(不可变)
作用:
去重复

lst = [11,5,4,1,2,5,4,1,25,2,1,4,5,5]
s = set(lst)    # 把列表转换成集合. 进行去重复
lst = list(s)   # 把集合转换回列表.

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

  增  add()

     update()  #迭代更新

  删  pop()

     remove()

        clear()

  该  set集合中的数据没有索引. 也没有办法去定位一个元素. 所以没有办法进行行直接修改.我们可以采用先删除后添加的方式来完成修改操作

s = {"刘嘉玲", '关之琳', "王祖贤","张曼⽟玉", "李李若彤"}
s.remove("刘嘉玲")
s.add("赵本山")
print(s)

  查  for i in s:

常用操作

  交集&  并集|  差集-  反交集^  子集<  超集>
frozenset()冻结的集合. 不可变的. 可哈希的


三. 深浅拷贝
1. =是赋值. 没有创建新对象. 公用同一个对象

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

2. 浅拷贝. 拷贝第一层内容. [:]或copy()

lst1 = ["何炅", "杜海海涛","周渝民", ["麻花藤", "马芸", "周笔畅"]]
lst2 = lst1.copy()
lst1[3].append("无敌是多磨寂寞")
print(lst1)
print(lst2)
print(id(lst1[3]), id(lst2[3]))
结果:
['何炅', '杜海海涛', '周渝⺠民', ['麻花藤', '马芸', '周笔畅', '无敌是多磨寂寞']]
['何炅', '杜海海涛', '周渝⺠民', ['麻花藤', '马芸', '周笔畅', '无敌是多磨寂寞']]
4417248328 4417248328

浅拷贝. 只会拷贝第一层.第二层地址直接复制,所以第二层指向的是同一个对象


3. 深拷贝. 拷贝所有内容. 包括内部的所有.

 

import copy          #引入函数
lst1 = ["何炅", "杜海海涛","周渝民", ["麻花藤", "马芸", "周笔畅"]]
lst2 = copy.deepcopy(lst1)
lst1[3].append("无敌是多磨寂寞")
print(lst1)
print(lst2)
print(id(lst1[3]), id(lst2[3]))
结果:
['何炅', '杜海海涛', '周渝⺠民', ['麻花藤', '⻢马芸', '周笔畅', '⽆无敌是多磨寂寞']]
['何炅', '杜海海涛', '周渝⺠民', ['麻花藤', '⻢马芸', '周笔畅']]
4447221448 4447233800

 

深度拷贝. 把元素内部的元素完全进行拷贝复制. 不会产生一个改变另一个跟着改变的问题

 

posted @ 2018-08-03 16:18  amberLIU  阅读(390)  评论(0)    收藏  举报