Set集合基本操作

集合的特点

无序,不重复(可以去重),元素是可哈希(不可变),一般用于测试交集、并集、差集等等。。。

set1={1,2,'banana'}

set1.add('apple')

迭代添加

set1.update([33,44,55])

set1.remove('banana')

制定删除

set1.pop()

随机删除

set1.clear()

清空集合

del set1  

删除集合

s = frozenset('barry')

不可变集合


set1 = {1,2,3,4,5}
set2 = {4,5,6,7,8}

交集

print (set1 & set2)

并集

print (set1 | set2)

差集

print (set1 - set2)

反交集

print (set1 ^ set2)

子集与父集

<  或者 >

深浅copy

1.赋值运算:

l1 = [1,2,3,['barry','alex']]
l2 = l1

l1[0] = 111
print(l1)  # [111, 2, 3, ['barry', 'alex']]
print(l2)  # [111, 2, 3, ['barry', 'alex']]

l1[3][0] = 'wusir'
print(l1)  # [111, 2, 3, ['wusir', 'alex']]
print(l2)  # [111, 2, 3, ['wusir', 'alex']]

赋值运算的内存地址一样的,不管l1怎么变化,都是l2=l1

2.浅copy:

l1 = [1,2,3,['barry','alex']]
l2=l1.copy()
print (l1,'内存地址:',id(l1))       #[1, 2, 3, ['barry', 'alex']] 内存地址: 8571272
print (l2,'内存地址:',id(l2))       #[1, 2, 3, ['barry', 'alex']] 内存地址: 7746184

l1 = [1,2,3,['barry','alex']]
l2=l1.copy()
l1[3][0]='gg'

print (l1,'内存地址:',id(l1[3]))        #[1, 2, 3, ['gg', 'alex']] 内存地址: 7279432
print (l2,'内存地址:',id(l2[3]))        #[1, 2, 3, ['gg', 'alex']] 内存地址: 7279432

浅copy相比于赋值预算,变动的只是最外面的一层,第二层以内的内容不会发生变化,仍然指向的是同一个内存地址

3.深copy:

import copy
l1 = [1,2,3,['barry','alex']]
l2 = copy.deepcopy(l1)
l1[3][0]='gg'

print (l1,'内存地址:',id(l1[3]))        #[1, 2, 3, ['gg', 'alex']] 内存地址: 18258696
print (l2,'内存地址:',id(l2[3]))        #[1, 2, 3, ['barry', 'alex']] 内存地址: 18258760

深copy说白了就是完全复制一份一模一样的列表,而且不伦层次。

 

发表评论