python 深淺拷貝

2022-09-23 03:22:07 字數 975 閱讀 4492

在python中,物件的賦值、拷貝(深淺)之間是有差異的,如果使用的時候不注意,就可能產生意外的結果。

其實這些問題是由共享記憶體導致的結果

拷貝原則上是把資料分離出來,複製其資料,以後修改互不影響。

=是賦值,資料完全共享(=賦值是在記憶體中指向同一個物件,如果是可變型別,如列表,修改其中一個(不是重新建一個列表),必定會改變。如果是不可變型別(immutable),比如字串,修改了其中一個列表裡面的值,另一個並不會變。)

l1 = [1, 2, 3, ['aa', 'bb']]

l2 = l1

l2[0]='aaa'

l2[3][0]='bbb'

print(l1) #['aaa', 2, 3, ['bbb', 'bb']]

print(id(l1)==id(l2)) #true

l2 = l1 ,l1 完全賦值給l2 ,l2的記憶體地址與l1 相同,即記憶體完全指向

淺拷貝:資料半共享(複製其資料獨立記憶體存放,但是隻拷貝成功第一層)

l1 = [1,2,3,[11,22,33]]

l2 = l1.copy()

print(l2) #[1,2,3,[11,22,33]]

l2[3][2]='aaa'

print(l1) #[1, 2, 3, [11, 22, 'aaa']]

print(l2) #[1, 2, 3, [11, 22, 'aaa']]

l1[0]= 0

print(l1) #[0, 2, 3, [11, 22, 'aaa']]

print(l2) #[1, 2, 3, [11, 22, 'aaa']]

print(id(l1)==id(l2)) #flase

如上述**,l2淺拷貝了l1 ,之後l2把其列表中的列表的元素給修改,從結果看出,l1也被修改了。但是僅僅修改l1列表中的第一層元素,卻並沒有影響l2。

python python元類

這兩天在看django框架,裡面的filter實現原理搞不明白,最後發現跟python的元類有關係 原文 元類本身而言,它們其實是很簡單的...

Python Python入門

python入門 今天開會的時候,領導說起python,說的那個叫人心動,於是乎就有了下面的東西。起步開始 一 概念 參考 個人總結 由荷蘭...

Python Python中in與not in

在python中,要判斷特定的值是否存在列表中,可使用關鍵字in 判斷特定的值不存在列表中,可使用關鍵字not in letters a b...