Python全棧Day 19部分知識點

  • 2020 年 1 月 19 日
  • 筆記

深淺拷貝

  淺拷貝

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]]

import copy

淺拷貝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'))  輸出False

  交集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)

輸出

(1, 2, 3, 4, 5, 6) 21

  函數參數位置順序:關鍵字參數-默認參數-*args-**kwargs

  函數的作用域