1. 程式人生 > 實用技巧 >二、Vue中的MVVM和options

二、Vue中的MVVM和options

深淺拷貝 -- 複製

面試必問:賦值、淺拷貝、深拷貝

淺拷貝:.copy / lst[:]

lst = [1,2,3,[5, 6, 7]]
lst1 = lst
print(lst1)
print(lst)

lst[-1].append(8)
print(lst1)
print(lst)

lst = [1, 2, 3, [5, 6, 7]]
lst1 = lst.copy()  # 新開闢一個空間給lst1
print(lst)
print(id(lst))
print(lst1)
print(id(lst1))

print(lst[0])
print(lst1[0])
print(id(lst[0]))
print(id(lst1[0]))

淺拷貝的時候,只會開闢一個新的容器列表,其他元素使用的都是原列表中的元素

lst = [1, 2, 3, [5, 6, 7]]
lst1 = lst.copy()
lst1[-1].append(8)
print(lst)
print(lst1)

lst = [1, 2, 3, [5, 6, 7]]
lst1 = lst.copy()
lst[0] = 11
print(lst1)
print(lst)

lst = [1, 2, 3, [5, 6, 7]]
lst1 = lst.copy()
lst[3] = 567
print(lst)
print(lst1)

lst = [1, 2, 3, 4, [5, 6, 7, [8, 9]]]
lst1 = lst.copy()
lst1.append(10)
print(lst)  # [1, 2, 3, 4, [5, 6, 7, [8, 9]]]
print(lst1)  # [1, 2, 3, 4, [5, 6, 7, [8, 9]], 10]

lst = [[1, 2], 90, 6, 7, [5, 6]]
lst1 = lst.copy()
lst1[0].append(8)
print(lst)
print(lst1)

dic = {"xieyulin": "50"}
dic1 = dic.copy()
dic["yilin"] = "10"
print(dic)
print(dic1)

dic = {"xieyulin": [1, 2, 3, [5, 6]]}
dic1 = dic.copy()
dic["xieyulin"][-1].append(0)
print(dic)
print(dic1)

dic = {"xieyulin": [1, 2, 3, [5, 6]]}
dic1 = dic.copy()
dic["xieyulin"][-1] = 0
print(dic)
print(dic1)

dic = {"xieyulin": [1, 2, 3, [5, 6]]}
dic1 = dic.copy()
dic["xieyulin"] = 0
print(dic)
print(dic1)

淺拷貝的時候,只拷貝第一層元素
淺拷貝在修改第一層元素(不可變資料型別)的時候,拷貝出來的新列表不進行改變
淺拷貝在替換第一層元素(可變資料型別)的時候,拷貝出來的新列表不進行改變
淺拷貝在修改第一層元素中的元素(第二層)的時候,拷貝出來的新列表進行改變

深拷貝:

import copy  # 匯入 copy是個模組

lst = [1, 2, 3, [5, 6, 7]]
lst1 = copy.deepcopy(lst)  # 深拷貝
lst[0] = '123'
print(lst)
print(lst1)  # 沒變,同淺拷貝

lst = [1, 2, 3, [5, 6, 7]]
lst1 = copy.deepcopy(lst)  # 深拷貝
lst[-1] = '123'
print(lst)
print(lst1)  # 沒變,同淺拷貝

lst = [1, 2, 3, [5, 6, 7]]
lst1 = copy.deepcopy(lst)  # 深拷貝
lst[-1].append(8)
print(lst)  # [1, 2, 3, [5, 6, 7, 8]]
print(lst1)  # 沒變 [1, 2, 3, [5, 6, 7]]

深拷貝開闢一個容器空間(列表),不可變資料公用,可變資料資料型別(再次開闢一個新的空間),空間裡的值使用的是不可變的資料進行公用,可變的資料型別再次開闢空間