集合与深浅copy

集合 set:

  set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。

要创建一个set,需要提供一个list作为输入集合。

>>> s = set([1, 2, 3])
>>> s
{1, 2, 3}

  注意,传入的参数[1, 2, 3]是一个list,而显示的{1, 2, 3}只是告诉你这个set内部有1,2,3这3个元素,显示的顺序也不表示set是有序的。。

重复元素在set中自动被过滤:

>>> s = set([1, 1, 2, 2, 3, 3])
>>> s
{1, 2, 3}

  通过add(key)方法可以添加元素到set中,可以重复添加,但不会有效果:

>>> s.add(4)
>>> s
{1, 2, 3, 4}
>>> s.add(4)
>>> s
{1, 2, 3, 4}

  通过remove(key)方法可以删除元素:

>>> s.remove(4)
>>> s
{1, 2, 3}

  set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作:

>>> s1 = set([1, 2, 3])
>>> s2 = set([2, 3, 4])
>>> s1 & s2
{2, 3}
>>> s1 | s2
{1, 2, 3, 4}

  

set和dict的唯一区别仅在于没有存储对应的value,但是,set的原理和dict一样,所以,同样不可以放入可变对象,因为无法判断两个可变对象是否相等,也就无法保证set内部“不会有重复元素”。试试把list放入set,看看是否会报错。

集合的其他操作:

交集。(&  或者 intersection)
set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1 & set2)  # {4, 5}
print(set1.intersection(set2))  # {4, 5}

并集。(| 或者 union
set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1 | set2)  # {1, 2, 3, 4, 5, 6, 7}

print(set2.union(set1))  # {1, 2, 3, 4, 5, 6, 7}

差集。(- 或者 difference)
set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1 - set2)  # {1, 2, 3}
print(set1.difference(set2))  # {1, 2, 3}

反交集。 (^ 或者 symmetric_difference)
set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}
print(set1 ^ set2)  # {1, 2, 3, 6, 7, 8}
print(set1.symmetric_difference(set2))  # {1, 2, 3, 6, 7, 8}

子集与超集
set1 = {1,2,3}
set2 = {1,2,3,4,5,6}

print(set1 < set2)
print(set1.issubset(set2))  # 这两个相同,都是说明set1是set2子集。

print(set2 > set1)
print(set2.issuperset(set1))  # 这两个相同,都是说明set2是set1超集。

frozenset不可变集合,让集合变成不可变类型
s = frozenset('barry')
print(s,type(s))  # frozenset({'a', 'y', 'b', 'r'}) <class 'frozenset'>

深浅copy:

#浅copy第一层在内层中时独立的,第二层开始以及更深的层次开始可以更改。
# li = [1,2,3]
# l2 = li.copy()
# li.append(666)
# print(l2)
#深copy 这两个时完全独立的,互不影响
#应用场景:完全独立的copy一分数据,与原数据没关系,深copy。如果一方数据(列表)第二层时,你想与元数据进行公用。
#面试题:
# l1 = [1,2,3,[22,33]]
# l2 = l1[:]
# l1.append(66)
# # l1[-1].append(66)
# print(l2)
# import copy
# l1 =[1,2,3,[22,]]
# l2 = copy.deepcopy(l1)
# # print(l1,l2)
# l1[-1].append('taibai')
# print(l2)
# set1 = set({1,2,'baarry'})
# set2 = {1,2,'barry'}
# print(set1,set2)
# set1 = {'alex','wusir','ritian','egon','barry'}
# set1.update('A')
# print(set1)
# set1.update('老师')
# print(set1)
# set1.update([1,2,3])
# print(set1)

  

原文地址:https://www.cnblogs.com/buchiyudeyang/p/9454755.html