集合与深浅copy

一 :集合

定义空集合:   a = set()

1.集合的元素必须是可哈希的,并且集合是无序的,元素具有互异性

集合的增删改查:

增:

set1 = {'alex','wusir','ritian','egon','barry'}
set1.add('景女神')
print(set1)             #{'ritian', 'alex', '景女神', 'wusir', 'barry', 'egon'}

#update:迭代着增加
set1.update('A')
print(set1)
set1.update('老师')
print(set1)
set1.update([1,2,3])
print(set1)              #重复着加进列表内

 

删:

set1 = {'alex','wusir','ritian','egon','barry'}

set1.remove('alex')  # 删除一个元素
print(set1)

set1.pop()  # 随机删除一个元素
print(set1)

set1.clear()  # 清空集合
print(set1)

del set1  # 删除集合
print(set1)

集合的其他操作:

交集,并集,子集,超集

二:深浅copy

浅copy:

li = [1,2,3,4,5,6,7,8,9]

1.格式:

print(li[ : ])              利用切片               #[1,2,3,4,5,6,7,8,9]

l1=li.copy()                                         #[1,2,3,4,5,6,7,8,9]

浅拷贝:拷贝的是值,li和l1的ID是不一样的

l1=li.copy()

print(l1 is li)        #False

但是:

li = [1,2,3,4,5,6,7,8,9,[2,6]]

l1=li.copy()

print(li is l1)

print(li[9] is l1[9])          拷贝的时候讲被嵌套的列表拷贝的是ID    #True

当被嵌套列表的元素发生改变的时候,拷贝后的列表中的嵌套元素也会发生改变

li = [1,2,3,4,5,6,7,8,9,[2,3]]
l1 = li.copy()
li[9].append(6)
print (li)                #[1, 2, 3, 4, 5, 6, 7, 8, 9, [2, 3, 6]]
print (l1)                #[1, 2, 3, 4, 5, 6, 7, 8, 9, [2, 3, 6]]
print ( li[9] is l1[9])     #True

如果只是在第一层列表进行值的修改,则不会传递到拷贝后的列表

li = [1,2,3,4,5,6,7,8,9,[2,3]]
l1 = li.copy()
li.append(6)
print (li)                     #[1, 2, 3, 4, 5, 6, 7, 8, 9, [2, 3], 6]
print (l1)                     #[1, 2, 3, 4, 5, 6, 7, 8, 9, [2, 3]]
print ( li[9] is l1[9])        #True
print (li is l1)               #False

深拷贝:

格式:

li.deepcopy()       #将他所有的元素全部拷贝,被嵌套的列表里的元素也会被copy,而不是copy被嵌套列表的ID,所以值改变不管在哪都不会传递

import copy               #引入copy模块
li = [1,2,3,4,5,6,7,8,9,[2,3]]
l1 =copy.deepcopy(li)
li[9].append(6)
li.append(6)
print (li)                 #[1, 2, 3, 4, 5, 6, 7, 8, 9, [2, 3, 6], 6]
print (l1)                 #[1, 2, 3, 4, 5, 6, 7, 8, 9, [2, 3]]
print ( li[9] is l1[9])    #False
print (li is l1)           #False

 




 

posted @ 2018-08-03 08:18  刘世荣  阅读(84)  评论(0)    收藏  举报