細說python中的深 淺拷貝與copy模組

2022-08-24 16:15:14 字數 852 閱讀 8250

=賦值:資料完全共享(=賦值是在記憶體中指向同乙個物件,如果是可變(mutable)型別,比如列表,修改其中乙個,另乙個必定改變

如果是不可變型別(immutable),比如字串,修改了其中乙個,另乙個並不會變

a='123'

b=aid(a)

id(b)

a='1'

print a #為1

print b #為123

id(a)

id(b)

記憶體位址不同了

a在記憶體中的引用物件變更了

如果是可變(mutable)型別,比如列表,修改其中乙個,另乙個必定改變

a=[1,2,3,4]

b=aprint a

print b

這個時候a與b相同

a[1]=4

print a #[1,4,3,4]

print b #[1,4,3,4]

這個時候變數a改變了,變數 b也同時跟著改變

淺拷貝:資料半共享(複製其資料獨立記憶體存放,但是只拷貝成功第一層)(如果資料內層改變,拷貝的資料也跟著改變)

例子:a=[1,2,3,4,[1,2,3]]

b=a    

id(a)!=id(b)#複製其資料獨立記憶體存放,但是只拷貝成功第一層

a[1]=3

因為第一層拷貝成功,a 改變,b不改變

a[4][1]=2這次變數a發生了改變,變數b的第二層資料也跟著改變,因為只拷貝成功了第一層,他們還共同引用第二次層的資料

深拷貝資料完全不共享(複製其資料完完全全放獨立的乙個記憶體,完全拷貝,資料不共享)

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...

python中的深淺拷貝與賦值。

賦值 賦值就是乙個變數引用乙個變數的值。這兩個變數共用乙個記憶體位址。當使用可變資料結構時 如 list,dict,set 其中乙個變數的值改變,會使另乙個變數的值也發生改變,但記憶體位址不改變。a 1 2,3 b ab 1 4print id a a,id b b 1992269718152 1,...

python中的賦值與深淺拷貝

在python中,只有在int和字串,元組等不可變型別中,與深淺拷貝的結果一樣 因為其是不可變型別,都是連記憶體位址一起 複製 了。而在list,dict,set中,深淺拷貝並沒有複製 位址 複製 記憶體位址的結果就是,之後的操作會影響原來的物件。以下所有的內容都是基於記憶體位址來說的。1.int型...