7 python資料型別補充 集合 深淺複製

2022-05-09 23:19:00 字數 4209 閱讀 3605

一、基礎資料型別補充知識

1、fromkeys    將乙個物件作為values分別複製給另乙個物件,另乙個物件裡的元素作為keys[注意:此時作為values的元素位址相同,因為他們引用的是同乙個位址,所以values相同。

dic=dict.fromkeys([1,2,3,4,5,6,],)

print(dic)

結果:對values    進行增加操作,每乙個配置的是相同的元素

努力!')

2、迴圈列表和字典時,不能刪除元素或者鍵值對

如下:刪除key中帶』k'的,這種迴圈時刪除鍵值對會報錯,解決的方式是迴圈時,將key新增到新的列表,然後在遍歷列表,將key及其對應的values值刪除。

dic=

for i in

dic.keys():

if'k'

ini :

deldic[i]

print(dic)

正確的解決方法:

dic=

l=for i in

dic.keys():

if'k'

ini :

#print(dic)

for j in

l :

deldic[j]

print(dic)

3、0、空字串、空列表、空字典對應的布林值都是false

結果顯示不加逗號,那麼這個資料型別就是它元素的型別

二、集合

1、集合是可變的資料型別,但是它裡面的元素是不可變的資料型別(所以集合不能作為字典的鍵)。集合裡的元素無序、不重複,這是他的特點。

集合的兩個特點:

1)不重複,把乙個列表轉化成集合,就自動去重了

2)關係測試,測試兩組資料之前的交集、差集、並集等關係

2、集合的方法:

1、集合的建立:

set1 = set()

set2 =

print(set1,set2) #

2、增加:add

set1 = set()

set1.add(

'wyx

')

updata

set1 = set()

set2 =

set1.add(

'wyx')

set1.update(

'laoshi

')

3、刪除:set .pop    隨機刪除,返回被刪除的元素

set .remove(『  『)按元素刪除,沒有會報錯

清空集合:set.clear()

del  刪除整個集合

set1 =

set1.remove('alex') # 刪除乙個元素

print(set1)

set1.pop() # 隨機刪除乙個元素

print(set1)

set1.clear() # 清空集合

print(set1)

del set1 # 刪除集合

print(set1)

4、集合不能修改:1、無序    2、元素不可變,改了就變了

5、查: 只能用for迴圈查

6、交集:

set1 = 

set2 =

print(set1 & set2) #

print(set1.intersection(set2)) #

7、並集:union   |

set1 = 

set2 =

print(set1 | set2) #

print(set2.union(set1)) #

8、差集:set1獨有的,set2沒有

set1 = 

set2 =

print(set1 - set2) #

print(set1.difference(set2)) #

9、反交集^   :除了共有的元素之外的元素集合

set1 = 

set2 =

print(set1 ^ set2) #

print(set1.symmetric_difference(set2)) #

10、子集與超集

set1 = 

set2 =

print(set1

print(set1.issubset(set2)) #

這兩個相同,都是說明set1是set2子集。

print(set2 >set1)

print(set2.issuperset(set1)) #

這兩個相同,都是說明set2是set1超集。

11、frozenset不可變集合,讓集合變成不可變型別。

s = frozenset('

barry')

print(s,type(s)) #

frozenset()

三、深淺copy

淺copy

l1 = [1,2,3,['

barry

','alex']]

l2 =l1.copy()

print(l1,id(l1)) #

[1, 2, 3, ['barry', 'alex']] 2380296895816

print(l2,id(l2)) #

[1, 2, 3, ['barry', 'alex']] 2380296895048

l1[1] = 222

print(l1,id(l1)) #

[1, 222, 3, ['barry', 'alex']] 2593038941128

print(l2,id(l2)) #

[1, 2, 3, ['barry', 'alex']] 2593038941896

l1[3][0] = '

wusir

'print(l1,id(l1[3])) #

[1, 2, 3, ['wusir', 'alex']] 1732315659016

print(l2,id(l2[3])) #

[1, 2, 3, ['wusir', 'alex']] 1732315659016

對於淺copy來說,第一層建立的是新的記憶體位址,而從第二層開始,指向的都是同乙個記憶體位址,所以,對於第二層以及更深的層數來說,保持一致性。

深copy

import

copy

l1 = [1,2,3,['

barry

','alex']]

l2 =copy.deepcopy(l1)

print(l1,id(l1)) #

[1, 2, 3, ['barry', 'alex']] 2915377167816

print(l2,id(l2)) #

[1, 2, 3, ['barry', 'alex']] 2915377167048

l1[1] = 222

print(l1,id(l1)) #

[1, 222, 3, ['barry', 'alex']] 2915377167816

print(l2,id(l2)) #

[1, 2, 3, ['barry', 'alex']] 2915377167048

l1[3][0] = '

wusir

'print(l1,id(l1[3])) #

[1, 222, 3, ['wusir', 'alex']] 2915377167240

print(l2,id(l2[3])) #

[1, 2, 3, ['barry', 'alex']] 2915377167304

對於深copy來說,兩個是完全獨立的,改變任意乙個的任何元素(無論多少層),另乙個絕對不改變。

7 python 資料型別

1.如果乙個字串包含很多需要轉義的字元,對每乙個字元都進行轉義會很麻煩。為了避免這種情況,我們可以在字串前面加個字首r,表示這是乙個 raw 字串,裡面的字元就不需要轉義了。例如 r 但是r 不能表示多行文字,怎麼解決 2.python在後來新增了對unicode的支援,以unicode表示的字串用...

7 python資料型別之集合set

資料型別之集合set set 不允許重複的無序集合,不能通過下標取值,因為無序 1 建立 建立空集合 s 預設型別為字典,所以不是空集合,空集合如下 s set s 字典是有鍵值對,集合沒有 s set 括號內可以接收可以迭代的元素,str list tuple dict 2 轉換 s 11,123...

7 Python基本資料型別 數字

在32位機器上,整數的位數為32位,取值範圍為 2 31 2 31 1,即 2147483648 2147483647 在64位系統上,整數的位數為64位,取值範圍為 2 63 2 63 1,即 9223372036854775808 9223372036854775807 例如 2 1 0 1 2...