1.賦值
l1=[1,2,3,4,[5,6,7]]
l2=l1 #賦值 賦值不是拷貝
print(l1)
print(l2)
2.淺拷貝l1=[1,2,3,4,[5,6,7]]
l2=l1[:]#淺拷貝
l2=l1.copy()#淺拷貝---只拷貝第一層
print(id(l1[0]))#記憶體位址相同
print(id(l2[0]))#記憶體位址相同
淺拷貝會建立乙個新的列表(容器),
新建立的列表中的元素和原列表的元素用的是同一記憶體空間
l1 = [1,2,3,4]
l2 = l1.copy()
print(l1)
print(id(l1))
print(id(l2))
print(id(l1[0]))
print(id(l2[0]))
兩個容器的記憶體位址不同,裡面與元素的記憶體位址相同
例1:li = [1,2,32,[3,4,5]]
l2 = li.copy()
print(l2)#[1, 2, 32, [3, 4, 5]]
print(li)#[1, 2, 32, [3, 4, 5], 8]
print(l2)#[1, 2, 32, [3, 4, 5, 8]]
print(li)#[1, 2, 32, [3, 4, 5, 8]]
例2:l1 = [1,2,3,(1,2,3)]
l2 = l1.copy()
l2[-1] = 6
print(l1) # 不變[1,2,3,(1,2,3)]
print(l2) # 不變[1,2,3,6] 改變了列表中最後乙個元素的指向關係
l1 = [1,2,3,4,[5,6,7,]]
l2 = l1.copy()
print(l2) #[1,2,3,4,[5,6,7,8]]
3.深copyimport copy
li = [1,2,3,4,5,[6,7,8]]
l2 = copy.deepcopy(li)
print(li)
# print(id(li))
print(id(li[-1]))
print(l2)
# print(id(l2))
print(id(l2[-1]))
深拷貝 --
不可變的資料型別和原列表指向同乙個空間
可變資料會建立乙個新的空間
1.import copy
li = [1,2,3,4,5,[6,7,8]]
l2 = copy.deepcopy(li)
print(li)#[1, 2, 3, 4, 5, [6, 7, 8, 678]]
print(l2)#[1, 2, 3, 4, 5, [6, 7, 8]]
2.import copy
li = [3,4,5,[1,2,3,4],6,7,8,]
l2 = copy.deepcopy(li)
li[-1]['k'] = "a"
print(li)
print(l2)
例1:
dic = {} # "v":4
li = #[,,,,]
for i in range(0,5):
dic["v"] = i
print(li)
>>>[, , , , ]
深淺拷貝以及深淺拷貝的方法
先考慮一種情況,對乙個已知物件進行拷貝,編譯系統會自動呼叫一種建構函式 拷貝建構函式,如果使用者未定義拷貝建構函式,則會呼叫預設拷貝建構函式。執行結果 呼叫一次建構函式,呼叫兩次析構函式,兩個物件的指標成員所指記憶體相同,name指標被分配一次記憶體,但是程式結束時該記憶體卻被釋放了兩次,會造成記憶...
拷貝和深淺拷貝
當list2為list的拷貝物件時,list內的可變資料型別變化,list2變化 list內的不可變資料型別變化,list2變化。總之 list變化list2一定變化 list 1,2,3,4,list2 list print list print list2 1,2,3,4,5 1,2,3,4,5...
12 深淺拷貝
複製物件的基本概念 複製乙個物件作為副本,它會開闢一塊新的記憶體 堆記憶體 來儲存副本物件,就像複製檔案一樣.即源物件和副本物件是兩塊不同的記憶體區域.物件具備複製功能,必須實現協議,協議.常用的可複製物件有 nsnumber,nsstring,nsarray,nsdictionary.nsmuta...