Python学习记录——深浅拷贝、集合

一.深浅拷贝

1.使用函数:

列表名.copy()  #eg:s2=s1.copy

2.深拷贝:

深拷贝新旧内容储存空间互相独立

eg:s1=[1,2,3]  s2=[1,2,3]

3.浅拷贝:

浅拷贝新旧内容共享储存空间,指针指向同一内容。对单个元素的修改仅体现在该列表上,对列表元素的修改体现在新旧列表上。

eg:a=[[1,2],3,4]  b=a.copy() (或者写b=a[:])

修改:b[0][0]=8

此时a、b都会改变,因为直接修改了内存中的内容和指针

二.集合

1.集合是一个无序的,不重复的数据组合

2.主要作用:

(1)去重,把一个列表变成集合,就自动去重了  #eg:s=list(set(s))

(2)关系测试,测试两组数据之前的交集、差集、并集等关系

3.概念:

(1)集合元素(set elements):组成集合的成员(不可重复)

(2)集合对象是一组无序排列的可哈希的值:集合成员可以做字典的键(如果列表中又包含列表,则不可用set转为集合,如s1=[[1,2],3])

4.集合分类:

(1)可变集合(set):可添加和删除元素,非可哈希的,不能用作字典的键,也不能做其他集合的元素

(2)不可变集合(frozenset):与上面恰恰相反

5.集合的相关操作:

(1)创建集合:由于集合没有自己的语法格式,只能通过集合的工厂方法set()和frozenset()创建

  若s=set('zhou'),即字符串形式,则输出s为{'z','h','o','u'};若s=set['zhou','boy'],即列表形式,则输出s为{'zhou','boy'}

(2)访问集合:由于集合本身是无序的,所以不能为集合创建索引或切片操作,只能循环遍历或使用in、not in来访问或判断集合元素

(3)更新集合:

  可使用以下内建方法来更新:

  s.add()  #注意,add里的内容作为一个元素添加进去,如果是字符串,不会拆分

  s.update()  #注意,update里的内容作为一个序列添加进去,如果是字符串,会拆分

  s.remove()

  注意:只有可变集合才能更新

(4)删除集合:del

6.集合类型操作符

(1)in ,not in

(2)集合等价与不等价(==, !=)

(3)子集(用<表示包含关系,不包含自身)、超集(A是B的子集,则B是A的超集)

(4)并集(|):等价方法是union(),与集合or操作等价,a.union(b)表示a、b中所有元素的集合(不重复)

(5)交集(&):等价方法是intersection(),与集合and操作等价,a.intersection(b)表示a、b共有的部分

(6)差集(-):等价方法是difference(),a.difference(b)表示a中去掉a、b共有的部分

(7)对称差集(^):等价方法是symmetric_difference(),表示a、b中非共有部分

原文地址:https://www.cnblogs.com/zhoujianlin/p/8468018.html