1.賦值: 只是複製了新物件的引用,不會開闢新的記憶體空間。
2.淺拷貝: 建立新物件,其內容是原物件的引用。
淺拷貝有三種形式:切片操作,工廠函式,copy模組中的copy函式。
如: lst = [1,2,3,[4,5]]
切片操作:lst1 = lst[:] 或者 lst1 = [each for each in lst] 要注意:list1=lst 和list1=lst[:]的區別
工廠函式:lst1 = list(lst)
copy函式:lst1 = copy.copy(lst)
淺拷貝之所以稱為淺拷貝,是它僅僅只拷貝了一層,在lst中有乙個巢狀的list[4,5],如果我們修改了它,情況就不一樣了。
3.深拷貝:只有一種形式,copy模組中的deepcopy函式。
和淺拷貝對應,深拷貝拷貝了物件的所有元素,包括多層巢狀的元素。
深拷貝出來的物件是乙個全新的物件,不再與原來的物件有任何關聯。
import copy參考:a = [1, 2, 3, 4, ['a', 'b']] #定義乙個列表a
b = a #賦值
c = copy.copy(a) #淺拷貝
# c = a[:]
d = copy.deepcopy(a) #深拷貝
print(a)
#[1, 2, 3, 4, ['a', 'b'], 5] #a新增乙個元素5
print(b)
#[1, 2, 3, 4, ['a', 'b'], 5] #b跟著新增乙個元素5
print(c)
#[1, 2, 3, 4, ['a', 'b']] #c保持不變
print(d)
#[1, 2, 3, 4, ['a', 'b']] #d保持不變
print(a)
#[1, 2, 3, 4, ['a', 'b', 'c'], 5] #a中的list(即a[4])新增乙個元素c
print(b)
#[1, 2, 3, 4, ['a', 'b', 'c'], 5] #b跟著新增乙個元素c
print(c)
#[1, 2, 3, 4, ['a', 'b', 'c']] #c跟著新增乙個元素c
print(d)
#[1, 2, 3, 4, ['a', 'b']] #d保持不變
#說明如下:
#1.外層新增元素時, 淺拷貝c不會隨原列表a變化而變化;內層list新增元素時,淺拷貝c才會變化。
#2.無論原列表a如何變化,深拷貝d都保持不變。
#3.賦值物件隨著原列表一起變化
(1). (python中的賦值(複製)、淺拷貝、深拷貝之間的區別
(2).的複製,深拷貝和淺拷貝的區別)
python中的拷貝
再說拷貝之前先說一說 is 與 is 的作用是 比較兩個引用是否為乙個位址 是比較兩個值 a和b中實際儲存的就是一條位址,因為都賦值為2,所以就都存了記憶體單元中2的位址。也就是說如果增加乙個變數c 另c a或c b,那麼c也指向的是2的記憶體位址 接下來說拷貝,拷貝與 賦值不同,拷貝是在建立乙個空...
python淺拷貝 Python中的淺拷貝和深拷貝
在python中,賦值語句不複製物件,它們只是在目標和物件之間建立繫結。當我們使用 運算子時,使用者認為這會建立乙個新物件 好吧,其實並沒有。它只建立乙個共享原始物件引用的新變數。有時使用者想要使用可變物件,為了做到這一點,使用者希望找到建立這些物件的 真實副本 或 轉殖 的方法。或者,有時使用者想...
Python中的拷貝與深淺拷貝
即為賦值.舉個例子 a 147147 b a 賦值 print a is b true 對於淺拷貝,字典 列表 元組等型別,它們只拷貝第一層位址 import copy n1 n3 copy.copy n1 淺拷貝 print id n1 print id n3 print id n1 k3 pri...