python中的深淺拷貝(copy)

字符串中的join方法

將列表轉換成字符串,每一個元素間用"內容"拼接,安全

join(可迭代對象)

s = ["高華新","劉清揚","崔園樟"]
s1 = "-".join(s)
print(s1) >>> 高華新-劉清揚-崔園樟

 

split() 字符串轉換成列表

ss = "高華新**劉清揚**崔園樟"
print(ss.split("**")) >>> ['高華新', '劉清揚', '崔園樟']

 

列表和字典在循環的時候不能直接刪除,須要把刪除的內容放在一個新列表中,而後再循環新列表,再刪除字典和列表中所對應的內容app

列表的直接remove刪除:spa

lst = ["紫雲", "大雲", "玉溪", "紫鑽","a","b"]
for el in lst:   # 有一個變量來記錄當前循環的位置
    lst.remove(el)
print(lst)  >>>  ['大雲', '紫鑽', 'b']                  
#刪除的時候, 發現. 剩餘了一下內容. 緣由是內部的索引在改變.
# # 須要把要刪除的內容記錄下來. 而後循環這個記錄. 刪除原來的列表

建立新列表刪除code

lst = ["紫雲", "大雲", "玉溪", "紫鑽","a","b"]
li = []
for i in lst:      # 遍歷列表中的元素
    li.append(i)    #將將刪除的元素添加到新列表中 
for i in li:        #遍歷新列表中的元素  
    lst.remove(i)       #舊列表刪除內容,由於遍歷的是新列表中的元素,因此原來的列表元素位置就不會自動往前走,不會內部循環
                        # 是最安全的
print(lst) >>> []       # 空列表
lst = ["張國榮", '張鐵林', '張國立', "張曼玉", "汪峯"]
# 刪掉姓張的

zhangs = []
for el in lst:
    if el.startswith(""):    # 記錄姓張的.
        zhangs.append(el)       #將姓張的放在新列表中
for el in zhangs:               #遍歷新列表
    lst.remove(el)              #刪除老列表中姓張的
print(lst)  >>>  ['汪峯']
print(zhangs) >>> ['張國榮', '張鐵林', '張國立', '張曼玉']  #新列表中全是姓張的

字典

dic = {"提莫":"馮提莫", "髮姐":"陳一發兒", "55開":"盧本偉"}
lst = []
for i in dic:
    lst.append(i)
for i in lst:
    dic.pop(i)
print(dic)  >>> {}

formkeys()

直接用類(class)訪問,返回新字典,對原字典沒有影響orm

後面的value是多個key共享一個value對象

dic = {"apple":"蘋果", "banana":"香蕉"}
print(dic.fromkeys("apple","蘋果"))  
>>>
 {'a': '蘋果', 'p': '蘋果', 'l': '蘋果', 'e': '蘋果'} #造成新字典,與原字典無關聯,遍歷前面造成key,共享後面一個value
print(dic.fromkeys("ab",["蘋果","橘子"]))
>>> 
{'a': ['蘋果', '橘子'], 'b': ['蘋果', '橘子']}

 

dic = {"apple":"蘋果", "banana":"香蕉"}
# 返回新字典. 和原來的不要緊
ret = dic.fromkeys("orange", "橘子") # 直接用字典去訪問fromkeys不會對字典產生影響
ret = dict.fromkeys("abc",["哈哈","呵呵", "吼吼"]) # fromkeys直接使用類名進行訪問
print(ret)
>>>
{'a': ['哈哈', '呵呵', '吼吼'], 'b': ['哈哈', '呵呵', '吼吼'], 'c': ['哈哈', '呵呵', '吼吼']}
a = ["哈哈","呵呵", "吼吼"]
ret = dict.fromkeys("abc", a) # fromkeys直接使用類名進行訪問
a.append("嘻嘻")
print(ret) 
>>>
{'a': ['哈哈', '呵呵', '吼吼', '嘻嘻'], 'b': ['哈哈', '呵呵', '吼吼', '嘻嘻'], 'c': ['哈哈', '呵呵', '吼吼', '嘻嘻']}

 

set集合

特色:無順序,不重複,裏面元素是可哈希(不可變)的blog

做用:用來去重索引

自己是可變的數據類型,有增刪改查操做內存

frozenset()凍結的集合. 不可變的. 可哈希的,凍結後集合不能再添加或刪除任何元素。rem

s = {"周杰倫", "的老婆","叫昆凌", (1,2,3), "周杰倫"}
lst = [11,5,4,1,2,5,4,1,25,2,1,4,5,5]
s = set(lst)    # 把列表轉換成集合. 進行去重複
lst = list(s)   # 把集合轉換回列表.
print(lst) >>> [1, 2, 4, 5, 11, 25]  #去重

# 集合自己是可變的數據類型, 不可哈希, 有增刪改查操做
s = {"劉嘉玲", '關之琳', "王祖賢"}
s.update("麻花藤")    # 迭代更新 無序
print(s) >>> {'王祖賢', '關之琳', '', '', '劉嘉玲', ''}

 

深淺拷貝

賦值, 沒有建立新對象. 共用同一個對象,他們是相同的,賦值後的變量指向原有的內存地址

淺拷貝.

拷貝第一層內容.不拷貝內部子對象,用 [:]或copy() 

lst1 = ["金毛獅王", "紫衫龍王", "青翼蝠王", "白眉鷹王",["張無忌","趙敏","周芷若"]]
print(lst1.copy())  #淺拷貝  拷貝出來的列表第一層與原來是不一樣的內存地址,第二層指向原來的地址 
>>>
['金毛獅王', '紫衫龍王', '青翼蝠王', '白眉鷹王', ['張無忌', '趙敏', '周芷若']] 
print(lst1[:]) #淺拷貝  
>>> 
['金毛獅王', '紫衫龍王', '青翼蝠王', '白眉鷹王', ['張無忌', '趙敏', '周芷若']] 

深拷貝.

拷貝全部內容. 包括內部的全部,造成一個新的對象,雖然與以前的值和內容如出一轍,可是它們完徹底全的兩個對象,用deepcopy()

lst1 = ["金毛獅王", "紫衫龍王", "青翼蝠王", "白眉鷹王",["張無忌","趙敏","周芷若"]]
lst2 = copy.deepcopy(lst1)
print(lst2)   >>>  ["金毛獅王", "紫衫龍王", "青翼蝠王", "白眉鷹王",["張無忌","趙敏","周芷若"]]
print(id(lst1)) >>> 358961124936
print(id(lst2)) >>> 358961315656
# lst1和lst2 是兩個不一樣內存地址的
相關文章
相關標籤/搜索