python -- 深淺拷貝

一、基礎數據類型的補充
     join()           "*".join('眉飛色舞')  # 眉*飛*色*舞 ;
                        把傳遞進去的參數進行迭代,獲取到的每一個元素和前面的* 進行憑藉,獲得的是字符串。
 
     split()根據給的參數進行切割,切割的結果是列表
lst = ['你是','','大風','',]
s = '*'.join(lst)
print(s)   # 你是*誰*大風*啊

s1 = '你是*誰*大風*啊'
print(s1.split('*'))  # ['你是', '誰', '大風', '啊']
   把字符串轉化成列表,:split()
    把列表轉化成字符串:join()
 
二、關於刪除
      列表和字典:都不能再循環的時候直接刪除。
      
刪不乾淨,緣由是:刪除一個,元素的索引要從新排列,for循環向後走一個,中間差一個。
lst =['足球','羽毛球','棒球','高爾夫','電子競技','籃球','檯球']

for ball in lst:
lst.pop(0)
print(lst)
# ['電子競技', '籃球', '檯球']

 

lst =['足球','羽毛球','棒球','高爾夫','電子競技','籃球','檯球']

for ball in lst:
lst.remove(ball)
print(lst)
# ['羽毛球', '高爾夫', '籃球']

從最後一位刪除 面試

lst =['足球','羽毛球','棒球','高爾夫','電子競技','籃球','檯球']

for i in range(len(lst)):
lst.pop()
print(lst)
# []

 

最合理的刪除方式:
 一、需把要刪除的內容記錄在新列表中,二、而後循環這個新列表,刪除原來的字典或者列表。
# 需求:刪除帶球的運動項目
lst =['足球', '羽毛球', '棒球', '高爾夫', '電子競技', '籃球', '檯球']

lst1 = [] # 建立新列表
for ball in lst: #循環列表中的每個元素
if '' in ball:
lst1.append(ball) # 講帶球的運動項目加到新列表中
for el in lst1: # 循環新列表中的每一項
lst.remove(el) # 刪除老列表中的帶球的運動項目
print(lst)

# ['高爾夫', '電子競技']
字典
    字典在循環的時候是不能被刪除的
dic = {'一班':'張娜','二班':'李冰','三班':'孫夢','四班':'劉欣'}
for k in dic:
dic.pop(k)
print(dic)
# 報錯 dictionary changed size during iteration
合理的刪除方式:
一、把要刪除內容的key保存在一個新列表中
二、循環這個列表,刪除字典中的key:value
dic = {'一班': '張娜','二班': '李冰','三班': '孫夢','四班': '劉欣'}
lis =[]
for k in dic:
lis. append(k)
for c in lis:
dic.pop(c)
print(dic)   # {}
集合和字典是一家人
字典:key必須是不可變的,可哈希的,不重複的
集合:元素必須是u可變的,可哈希的,不重複的
 
 
fromkeys()   幫咱們建立字典用的(面試的時候經常使用)
把第一個參數進行迭代,拿到每一項做爲key和後面的value組成字典。
 
注1:返回新字典和原來的字典沒有關係,老字典不會變動 
dic ={}
d = dic.fromkeys('五班','牧校')
print(dic)  # {}
print(d)   # {'五': '牧校', '班': '牧校'}

注2:若是value是可變的數據類型,各個key共享同一個可變的數據類型,其中一個被改變了,其餘的都跟着變。 app

dic = {}
d = dic.fromkeys('浩海星辰',[])
d[''].append('')
print(d)
# {'浩': ['夢'], '海': ['夢'], '星': ['夢'], '辰': ['夢']}
dic = {}
d = dic.fromkeys('浩海星辰', [])
d['']= ''
print(d)
# {'浩': [], '海': '夢', '星': [], '辰': []}
 
三、深淺拷貝
 
      一、= 沒有建立新對象,只是把內存地址進行了複製
lst = ['春天','夏天','秋天','冬天']
lst1 = lst
print(id(lst))
print(id(lst1))
# 2198492593352
# 2198492593352

  二、淺拷貝  lst.copy() 只拷貝第一層,能夠幫咱們建立新的對象,和原來的長得如出一轍 spa

lst = ['春天','夏天','秋天','冬天']
lst1 = lst.copy()
print(id(lst))
print(id(lst1))
# 1575045283016
# 1575045309320

 

lst1 = lst.copy()
lst[4].append('晚上')
print(lst)
print(lst1)
# ['春天', '夏天', '秋天', '冬天', ['早上', '中午', '晚上']]
# ['春天', '夏天', '秋天', '冬天', ['早上', '中午', '晚上']]
  三、深拷貝  import  copy
                       copy.deepcopy()  會把對象內部的全部內容都進行拷貝,深度克隆(clone),原型模式
import copy
lst = ['春天','夏天','秋天','冬天',['早上','中午']]
lst1 = copy.deepcopy(lst)
lst[4].append('晚上')
print(lst)
print(lst1)
# ['春天', '夏天', '秋天', '冬天', ['早上', '中午', '晚上']]
# ['春天', '夏天', '秋天', '冬天', ['早上', '中午']]
爲何要深淺拷貝?
 
    提升建立對象的速度
    計算機中最慢的就是建立對象,須要分配內存
    最快的方式就是二進制流的形式進行復制,速度最快
相關文章
相關標籤/搜索