深淺拷貝 淺拷貝 a=[[1,2],3,4] b=a[:] #b=a.copy() 淺拷貝 作用 輸出 ['Xiaomei', 345, [15000, 6000]] 淺拷貝copy.copy() 深拷貝copy.deepcopy() 輸出 ['Xiaomei', 345, [15000, 6000 ...
深淺拷貝
淺拷貝
a=[[1,2],3,4]
b=a[:] #b=a.copy()
淺拷貝 作用
1 #共用賬戶 2 husband=['Xiaohu',123,[15000,9000]] #姓名,卡號,額度,餘額 3 wife=husband.copy() #淺拷貝 4 wife[0]='Xiaomei' 5 wife[1]=345 6 husband[2][1]-=3000 7 print(wife)
輸出
['Xiaomei', 345, [15000, 6000]]
淺拷貝copy.copy()
深拷貝copy.deepcopy()
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 4 # a=[[1,2],3,4] 5 # b=a.copy() 6 # b[1]='cy' 7 # print(a,b) 8 # b[0][0]=5 9 # print(a,b) 10 import copy 11 #共用賬戶 12 husband=['Xiaohu',123,[15000,9000]] 13 wife=husband.copy() 14 wife[0]='Xiaomei' 15 wife[1]=345 16 xiaosan=copy.deepcopy(husband) #深拷貝 17 xiaosan[0]='xiaoling' 18 xiaosan[1]=666 19 xiaosan[2][1]-=1999 20 husband[2][1]-=3000 21 print(wife) 22 print(xiaosan)
輸出
['Xiaomei', 345, [15000, 6000]]
['xiaoling', 666, [15000, 7001]]
所以說,改變3,4的話不會使a改變,而改變1,2的時候會變。
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 a=[[1,2],3,4] 4 b=a.copy() 5 b[1]='cy' 6 print(a,b) 7 b[0][0]=5 8 print(a,b)
輸出
[[1, 2], 3, 4] [[1, 2], 'cy', 4]
[[5, 2], 3, 4] [[5, 2], 'cy', 4]
修改可變對象(比如列表)會影響之前,修改不可變對象(整型)不會。
a是一個列表(複雜數據類型),執行b=a之後,a,b共用一個記憶體空間,b相當於a的別名;而a是一個整型數字(簡單數據類型),b=a,再改變a對b無影響。
淺拷貝只會拷貝第一層。一般來說淺拷貝就夠了,不然克隆一份會占很多空間。
集合set(重點)
集合對象是一組無序排列的可哈希的值:集合成員可以做字典的鍵(字典的鍵要求是可哈希的),集合本身不可以作為鍵。
創建方式只有一種,s=set(...)
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 s=set('alex li') 4 print(s)
輸出
{' ', 'x', 'l', 'i', 'a', 'e'}
可以去重,是一組不同元素的組合,{}括起來。
集合可以和列表相互轉換,set(),list(),表象上看轉變之後括弧變了。
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 l=['yangyang','yuanyuan','yangyang'] 4 s=set(l) 5 print(s) 6 l_new=list(s) 7 print(l_new)
輸出
{'yuanyuan', 'yangyang'}
['yuanyuan', 'yangyang']
frozenset不可變集合
set集合的更新:add() #添加一個元素
update() #將元素作為序列,遍歷添加
remove() #括弧內寫要刪除的元素名
pop() #隨機刪一個
clear() #清空集合中的元素
del s #刪掉集合這個容器
集合的等價print(set('alex'))==set('alexexex') 輸出True #等價
子集和超集print(set('alex'))==set('alexwwww') 輸出True
交集intersection #等效於a & b #print(a.intersection(b))列印二者公有的元素組成的集合
並集union #等效於a | b
差集difference #等效於a - b #print(a.difference(b))列印在a中卻不在b中的元素組成的集合
反向交集(對稱差集:集合A與集合B的對稱差集定義為集合A與集合B中所有不屬於A∩B的元素的集合) #等效於a ^ b symmetric_difference 除去公有元素之外的元素組成的集合
issuperset超集判斷 #等效於a > b 例如a.issuperset(b)判斷的是a是否為b的超集
issubset子集判斷 #等效於a < b
函數
函數!=數學中的function()
電腦函數(語句的封裝) == subroutine 子程式 procedure 過程
作用
1.減少重覆代碼;
2.方便修改,更易擴展;
3.保持代碼一致性
函數名命名規則:
下劃線或字母開頭,由字母、數字、下劃線組成,不可使用任意標點;
區分大小寫;
不能是保留字(python內部用的名字)。
返回當前時間的操作:import time time_format='%Y-%m-%d %X' time_current=time.striftime(time_format)
關於return:return意味著函數結束。如果沒有回返回None;如果返回多個對象,python會把它們封裝成元組返回。
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 #高大上加法器 4 def add(*args): #不定長參數 *args元組(無名參數) **kwargs字典(有名參數) 5 print(args) 6 sum=0 7 for i in args: 8 sum+=i 9 print(sum) 10 add(1,2,3,4,5,6)
輸出
15
函數參數位置順序:關鍵字參數-預設參數-*args-**kwargs
函數的作用域