python3 存储变量在内存空间开辟内容空间,这个内存空间会有一个地址,变量指向的就是该内容空间的地址
深浅拷贝
深拷贝:两份独立的数据,各自去进行操作,不会有相互影响,直接克隆一份数据, 使用模块 copy
>>> import copy
>>> a = [[1,2],3,4]
>>> b = copy.deepcopy(a)
>>> a[0][0]=10 #修改a中第一个list中的数据不会影响深拷贝的b中的数据
>>> print(a)
[[10, 2], 3, 4]
>>> print(b)
[[1, 2], 3, 4]
浅拷贝:拷贝后两份数据操作会有相互影响,copy的时候只对第一层生效,即是copy数据第一层的内存空间地址,第二层的数据会有另外的内容空间,但是在第一层的指向地址空间是不变的,如果进行修改第二层的数据,则第二层数据的指向地址发生变化,同时copy的两份数据都会发生变化.
>>> a = [[1,2],3,4]
>>> b = a.copy() # 浅拷贝
>>> print(b)
[[1, 2], 3, 4]
>>> a[0][0] = 5 #修改a中的元素list中的值,b中的list元素的值也跟着改变,因为该list指向的内存空间是没有发生变化的
>>> print(a)
[[5, 2], 3, 4]
>>> print(b)
[[5, 2], 3, 4]
数据类型 set
set的特点: 无序,不重复
set集合,把不同的元素集合到一起,集合对象是一组无序排列的可哈希的值,集合成员可以做字典的键
创建set 通过关键字去进行创建
>>> s= set('Li Lei')
>>> print(s)
{' ', 'e', 'L', 'i'} #去重,重复的保留一个
可变集合 set
不可变集合 frozenset, 不能进行修改添加集合中的内容
set集合的访问只能通过迭代或者遍历的方式进行访问。
更新集合
添加 add() 直接添加add的内容
update() 将要添加的内容作作为一个序列添加到集合中,如果由重复只保留一个, update方法添加的是一个序列list
remove()直接删除元素
集合的pop()删除方法随机删除其中的一个内容,返回该删除的内容值
clear()方法清除集合中的元素内容
del 方法删除整个集合
>>> li=[1,2,3,'lilei']
>>> s = set(li)
>>> s. add('xx')
>>> print(s)
{1, 2, 3, 'lilei', 'xx'}
>>> s.update('yy')
>>> print(s)
{1, 2, 3, 'lilei', 'xx', 'y'}
>>> s.update('open')
>>> print(s)
{1, 2, 3, 'o', 'e', 'n', 'lilei', 'xx', 'y', 'p'}
>>> s.update([13,'hanmei'])
>>> print(s)
{1, 2, 3, 'o', 'e', 'n', 'lilei', 'xx', 13, 'y', 'hanmei', 'p'}
>>> s.update([13,'lilei'])
>>> print(s)
{1, 2, 3, 'o', 'e', 'n', 'lilei', 'xx', 13, 'y', 'hanmei', 'p'}
>>> s.pop()
1
>>> s.remove('lilei')
>>> print(s)
{2, 3, 'o', 'e', 'n', 'xx', 13, 'y', 'hanmei', 'p'}
>>> s.clear()
>>> print(s)
set()
集合的操作
>>> a = set([1,2,3,4,5])
>>> b = set([3,4,5,6,7])
交集 intersection() 运算符 &
两个集合相同部分取出作为一个新的集合
>>> a.intersection(b)
{3, 4, 5}
>>> a & b
{3, 4, 5}
并集 union() 运算符 |
两个集合合并为一个集合
>>> a.union(b)
{1, 2, 3, 4, 5, 6, 7}
>>> a | b
{1, 2, 3, 4, 5, 6, 7}
差级 difference() 运算符 -
>>> a.difference(b) #a中有的但是在b中没有的
{1, 2}
>>> a-b
{1, 2}
>>> b.difference(a) # b 中有的但是在a中没有的
{6, 7}
>>> b-a
{6, 7}
对称差集 ,反向交集,symmetric_difference() 运算符 ^
(两个集合的并集-交集得到的集合。)
>>> a.symmetric_difference(b)
{1, 2, 6, 7}
>>> a ^ b
{1, 2, 6, 7}
父集,子集 运算符 > , <
判断是否包含与被包含关系
>>> a = set ([1,2,3,4,5])
>>> b = set([1,2,3])
>>> b.issubset(a) # b 是 a的子集 返回结果为True, b被包含于a
True
>>> b<a
True
>>> a.issuperset(b) #a 是 b 的父集,返回结果为True, a 包含 b
True
>>> a>b
True