簡述python的字串駐留機制?
含義:字串駐留是一種在記憶體中僅儲存乙份相同且不可變字串的方法(python的駐留機制對相同的字串只保留乙份拷貝,後續建立相同字串時,不會開闢新空間,而是把該字串的位址賦給新建立的變數),類似資料庫的儲存過程。
使用方法:1>系統維護interned字典,記錄已被駐留的字串物件。
2>當字串物件a需要駐留時,先在interned檢測是否存在,若存在則指向存在的字串物件,a的引用計數減1;若不存在,則記錄a到interned中。
什麼時候會用到字串駐留機制:1>字串長度為0或1時,預設採用駐留機制。
2>字串長度大於1時,且字串中只包含大小寫字母、數字、下劃線時,採用駐留機制。
3>字串只在編譯時進行駐留,而非執行時(.pyc檔案)。
4>用乘法得到的字串,如果結果長度 <=20且字串只包含數字、字母大小寫、下劃線,支援駐留。長度》20,不支援駐留。這樣的設計目的是為了保護.pcy檔案不會被錯誤**搞的過大。
5>對於[-5,256]之間的整數數字,python預設駐留。
6>pyhton提供intern方法強制2個字串指向同乙個物件。
python 乙個數如果恰好等於它的因子之和,這個數就稱為"完數"。例如6=1+2+3.程式設計找出1000以內的所有完數。
importmath
for i in range(2, 1000):
factors = #
i 每次迴圈都清空
for j in range(1, math.floor(i/2)+1):
if i%j ==0:
if sum(factors) ==i:
print(i, end='
,')
如何在python中拷貝乙個物件, 並說明他們之間的區別?
有三種方法:賦值、淺拷貝、深拷貝
區別:賦值:只是複製了新物件的引用,不會開闢新的記憶體空間。
淺拷貝:建立新物件,其內容是原物件的引用。
#三種方法:
"""#切片操作:
lst = [1,2,3,[4,5]]
lst1 = lst[:] #或者:lst1 = [each for each in lst]
""""""
#工廠函式:
lst = [1,2,3,[4,5]]
lst1 = list(lst)
"""#
copy函式
lst = [1,2,3,[4,5]]
lst1 = copy.copy(lst)
淺拷貝之所以稱為淺拷貝,是它僅僅只拷貝了一層,在lst中有乙個巢狀的list[4,5],如果我們修改了它,情況就不一樣了。
深拷貝:只有一種形式,copy模組中的deepcopy函式; 和淺拷貝對應,深拷貝拷貝了物件的所有元素,包括多層巢狀的元素;深拷貝出來的物件是乙個全新的物件,不再與原來的物件有任何關聯。(copy.deepcopy
)#1.外層新增元素時, 淺拷貝c不會隨原列表a變化而變化;內層list新增元素時,淺拷貝c才會變化。
#2.無論原列表a如何變化,深拷貝d都保持不變。
#3.賦值物件隨著原列表一起變化
每日一練 5 18
1 jquery 中有哪些方法可以遍歷節點?children 取得匹配元素的子元素集合 next 取得匹配元素後面緊鄰的同輩元素 prev 取得匹配元素前面緊鄰的同輩元素 siblings 取得匹配元素前後的所有同輩元素 closest 取得最近的匹配元素 find 取得匹配元素中的元素集合,包括直...
vim每日一練(三) 查詢匹配
基本查詢 n offset 向前找第n個出現的,offset 表示定位到找到的下面的第offset行 n offset 向 後找第n個出現的,offset 表示定位到找到的下面的第offset行 n 前向重複上個查詢 n 後向重複上個查詢 n n 重複上個查詢 n n 反方向重複上個查詢 n 向前查...
每日任務 每日一練 20200716
c語言陣列的學習 1.程式設計乙個逆序的陣列,只能交換,不能定義臨時陣列 include define arrlen 10 intmain int argc,char const ar for int i 0 i arrlen i swap for int i 0 i arrlen 2 i prin...