Python全棧day19(函式補充)

2022-06-24 11:12:11 字數 3061 閱讀 2246

一,深淺拷貝

看拷貝列子day19-1.py

s=[1,'zhangsan','lisi']

#s2是s的拷貝

s2=s.copy()

#列印s2和s是一樣的

print(s2)

#修改s2

s2[0]=2

#列印s是未變的

print(s)

#列印s2因為修改了所以有變化

print(s2)

[1, 'zhangsan', 'lisi']

[1, 'zhangsan', 'lisi']

[2, 'zhangsan', 'lisi']

假如修改的元素是乙個列表,源列表也會發生變化day19-2.py

s = [[1,2],'zhangsan','lisi']

s3=s.copy()

print(s3)

print(s)

s3[0][1]=3

#修改s3裡面列表元素以後源列表也對應改變了

print(s3)

print(s)

[[1, 2], 'zhangsan', 'lisi']

[[1, 2], 'zhangsan', 'lisi']

[[1, 3], 'zhangsan', 'lisi']

[[1, 3], 'zhangsan', 'lisi']

為什麼會這樣,因為第一次修改的是乙個不可變元素對應的指標發生了變化,第二次s和s3指向的記憶體位址是乙個可變的元素(列表)當列表發生改變,但是列表的記憶體位址沒有改變s和s3的指向沒有發生改變,所以修改s3的第乙個元素列表對應的s的第乙個元素列表也發生了改變。

這就是淺拷貝,淺拷貝只拷貝第一層

深拷貝等於轉殖乙份,需要單獨的模組day19-4.py

import copy

l1 = [[1,2],3]

l2 = copy.deepcopy(l1)

print(l2)

[[1,2],3]

深淺拷貝小結

二,集合

把不同元素整合在一起形成集合(元素不能重複,重複認為是乙個)

建立集合的方法 set() 必須是可雜湊的物件,單個元素不能是列表或者字典等不可雜湊物件

集合分類:可變集合,不可變集合

可變集合(set):可新增刪除元素,非可雜湊的,不能用做字典的建,不能做其他集合的元素

不可變集合(frozenset):與可變集合恰恰相反 (可變集合不能作為字典的建不可變集合可以作為字典的建)

集合是無序的不能通過索引或者切片操作,可以通過for迴圈遍歷或者通過in,not in判斷是否在裡面

更新集合

s.add() 新增乙個元素

s.remove()移除指定元素

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

s.clear()清空(和刪除不一樣清空後還是有大括號的)

s.update()更新 接乙個可迭代物件新增多個元素 之前的保留(接的是乙個可迭代物件)

day19-5.py

li=[1,2,3]

s = set(li)

print(s)

s.add(4)

print(s)

s.remove(4)

print(s)

s.update('hello')

print(s)

等價與不等價

print(set('hello')==set('hellohello'))

true

子集與父集(父集要包含子集並且多於子集不能等於否則python認為不包含返回false)

print(set('123')交集,並集,差集day19-6.py

a = set([1,2,3,4,5])

b = set([4,5,6,7,8])

#以下兩種方式求交集

print(a.intersection(b))

print(a&b)

#以下兩種方法求並集

print(a.union(b))

print(a|b)

#in a but not in b (差集)

print(a.difference(b))

print(a-b)

#in b but not in a(差集)

print(b.difference(a))

print(b-a)

#除了交集把其餘的取出來 對稱差集或者叫反向交集

print(a.symmetric_difference(b))

print(a^b)

父集,子集day19-6.py

a = set([1,2,3])

b = set([1,2])

#判斷是否a是否是b的父集

print(a.issuperset(b))

print(a>b)

#判斷b是否是a的子集

print(b.issubset(a))

print(b三,函式

a,定義: 函式是指將一組語句的集合通過乙個名字(函式名)封裝起來,要想執行這個函式,只需呼叫其函式名即可

特性:

1.**重用

2.保持一致性

3.可擴充套件性

b,函式的建立  

#函式的定義

def f():

print('hello world')

#函式的呼叫

f()'hello world

ps:函式的命名規則(和變數命名規則是一樣的)

c,形參和實參

形參:形式引數,不是實際存在,是虛擬變數。在定義函式和函式體的時候使用形參,目的是在函式呼叫時接收實參(實參個數,型別應與實參一一對應)

實參:實際引數,呼叫函式時傳給函式的引數,可以是常量,變數,表示式,函式,傳給形參   

區別:形參是虛擬的,不占用記憶體空間,.形參變數只有在被呼叫時才分配記憶體單元,實參是乙個變數,占用記憶體空間,資料傳送單向,實參傳給形參,不能形參傳給實參

與之前重複,未整理完整!

Day19(棧 佇列 雙端佇列)

目錄棧 棧結構實現 棧的操作 佇列 佇列的實現 操作 雙端佇列 操作 實現棧 stack 有些地方稱為堆疊,是一種容器,可存入資料元素 訪問元素 刪除元素,它的特點在於只能允許在容器的一端 稱為棧頂端指標,英語 top 進行加入資料 英語 push 和輸出資料 英語 pop 的運算。沒有了位置概念,...

每日演算法 day 19

那些你早出晚歸付出的刻苦努力,你不想訓練,當你覺的太累了但還是要咬牙堅持的時候,那就是在追逐夢想,不要在意終點有什麼,要享受路途的過程,或許你不能成就夢想,但一定會有更偉大的事情隨之而來。mamba out 2020.3.2 先將十六進製制轉化為二進位制 二進位制每四位可以表示乙個十六進製制的數字 ...

day19 學習總結

今天學習了陣列的使用和多維陣列。下面是知識點 package com.liangwenwei.陣列 public class 陣列的使用 列印全部陣列元素 for int i 0 i arrays.length i system.out.println 列印全部陣列元素 for int array ...