python 集合和深淺拷貝

2022-08-26 11:39:11 字數 4299 閱讀 4011

一. 知識點補充

1. 列表和字典不能在迴圈過程中進行增刪操作,因為列表索引在迴圈過程會發生改變,字典規定迴圈不可改變.

刪除方法: 將需要大量刪除的列表或者字典遍歷取出要刪除的物件,放入乙個空列表,之後對列表進行迴圈遍歷,刪除原列表或字典.

2. fromkeys(' a ', ' b ')不會對原來的字典產生影響. 產生新字典(將a迭代變成字典的key, b為每個key的vlaue)

dic = 

dic.fromkeys(

"救世主

", "

暗帝" ) #

返回給你乙個新字典

print

(dic)

#輸出結果:

dic =

a = dic.fromkeys("

救世主", "

暗帝" ) #

返回給你乙個新字典

print

(a)#

輸出結果:

二. set集合: 是乙個無序且不重複的元素集合    

1. 集合物件是一組無序排列的可雜湊的值,集合成員可以做字典中的鍵。

集合支援用in和not in操作符檢查成員,由len()內建函式得到集合的基數(大小), 用 for 迴圈迭代集合的成員。

但是因為集合本身是無序的,不可以為集合建立索引或執行切片(slice)操作,也沒有鍵(keys)可用來獲取集合中元素的值.

2. 建立空集合時,只能用set(),如果用第二種方法s={},建立的實際上是乙個空字典

s ={}

print

(type(s))

#輸出結果:

a=set('

boy'

)b=set(['

y', '

b', '

o','o'

])c=set()

d=e=

print

(a,type(a))

print

(b,type(b))

print

(c,type(c))

print

(d,type(d))

print

(e,type(e))

#執行結果如下:#

# #

# #

3. 增加   

a=set('

python')

a.add(

'tina')

print

(a)b=set('

python')

b.update(

'tina')

print

(b)#

執行結果如下:##

#由以上**可以看出,add是單個元素的新增,而update是批量的新增。輸#出結果是無序的,並非新增到尾部。

4.刪除(remove,discard,pop)

c=

c.remove('p

')print

(c)#

輸出結果: c=

c.discard('p'

)print

(c)#

輸出結果: c=

c.pop()

print

(c)#

輸出結果: 執行結果如下:

#當執行c.remove('p','i')和c.discard('p','i')時,報錯:typeerror: #remove() takes exactly one argument (2 given),

#說明remove和discard刪除元素時都只能乙個乙個的刪,同add對應。

#remove,pop和discard的區別:

#discard刪除指定元素,當指定元素不存在時,不報錯;

#remove刪除指定元素,但當指定元素不存在時,報錯:keyerror。

#pop刪除任意元素,並可將移除的元素賦值給乙個變數,不能指定元素移#除。

5. 清空

c=

c.clear()

print

(c)#

執行結果如下:

#set()

三. 深淺拷貝

1. 賦值

lst1 = ["

金毛獅王

", "

紫衫龍王

", "

白眉鷹王

", "

青衣服往"]

lst2 = lst1 #

列表, 進行賦值操作. 實際上是引用記憶體位址的賦值. 記憶體中此時只有乙個列表. 兩個變數指向乙個列表

楊左使") #

對其中的乙個進行操作. 兩個都跟著變

print

(lst2)

print

(lst1)

#輸出結果: ['金毛獅王', '紫衫龍王', '白眉鷹王', '青衣服往', '楊左使']

#['金毛獅王', '紫衫龍王', '白眉鷹王', '青衣服往', '楊左使']

2. 淺拷貝

lst1 = ["

金毛獅王

", "

紫衫龍王

", "

白眉鷹王

", "青翼蝠王"]

#lst2 = lst1.copy() # lst2 和lst1 不是乙個物件了

lst2 = lst1[:] #

切片會產生新的物件

楊左使")#

對lst1進行新增

print(lst1)#

列印列表二者不相同

print

(lst2)

print(id(lst1))#

列印lst1和lst2的id,二者是不相同的

print

(id(lst2))

#輸出結果:['金毛獅王', '紫衫龍王', '白眉鷹王', '青翼蝠王', '楊左使']

#['金毛獅王', '紫衫龍王', '白眉鷹王', '青翼蝠王']

超人", "

七龍珠", "

葫蘆娃", "

山中小獵人

", ["

金城武", "

王力巨集", "

渣渣輝"

]]lst2 = lst1.copy() #

拷貝. 淺拷貝 拷貝第一層

大陽哥") #

對lst1中的列表內的列表進行新增

print

(lst1)

print

(lst2)

#輸出結果:

#['超人', '七龍珠', '葫蘆娃', '山中小獵人', ['金城武', '王力巨集', '渣渣輝', '大陽哥']]

#['超人', '七龍珠', '葫蘆娃', '山中小獵人', ['金城武', '王力巨集', '渣渣輝', '大陽哥']]

3. 深拷貝

import

copy

lst1 = ["

超人", "

七龍珠", "

葫蘆娃", "

山中小獵人

", ["

金城武", "

王力巨集", "

渣渣輝"

]]lst2 = copy.deepcopy(lst1) #

把lst1扔進去進行深度拷貝 , 包括內部的所有內容進行拷貝

大陽哥") #

對lst1列表內的巢狀列表進行新增

print

(lst1)

print

(lst2)

#輸出結果:

#['超人', '七龍珠', '葫蘆娃', '山中小獵人', ['金城武', '王力巨集', '渣渣輝', '大陽哥']]

#['超人', '七龍珠', '葫蘆娃', '山中小獵人', ['金城武', '王力巨集', '渣渣輝']]

*為什麼要有深淺拷貝

*拷貝比建立物件的過程要快

set集合和深淺拷貝

set 集合 不重複,無序,內容必須可hash 不可變 可用來去重複 lst 1,2,3,4,1,2,3,4,5 s set lst lst list s print lst 1,2,3,4,5 增加.add update 迭代新增 update abc 刪除.remove 直接刪除,不存在會報錯 ...

Python之集合與深淺拷貝

一.集合 可變資料型別,但是元素必須是不可變的資料型別,無序,元素具有唯一性 add 給集合新增乙個元素 clear 清空乙個集合 set copy 返回乙個淺拷貝集合 difference set1 set2 set1.difference set2 返回set1有set2中沒有的元素組成的集合 ...

set集合 ,深淺拷貝

一 之前內容的補充 1.join 將列表轉換成字串 2.split 將字串轉換成列表 3列表和字典在進行for迴圈時是不可以刪除的 準確的說是刪除的不徹底 刪除操作需要先建立乙個新的空列表,把老列表裡的元素迴圈 然後給到新的列表,然後再迴圈新的列表,刪除舊的列表.列表的刪除用的是remove,字典用...