python 賦值 比較 深淺copy

2022-06-21 03:54:11 字數 1537 閱讀 9219

物件的三個要素id,型別,值。id 指的是記憶體位址,id 相同則兩個物件完全相同

=  賦值運算,a = b,指的是b 的id 與a 相同,b 的資料與a 指向相同的記憶體空間

is  判斷,返回true/false,a is b 判斷a 與 b 的id 是否相同

==     判斷,等號兩邊的值相等

練習1a = "123"

b = "123"

a is b  >>  true  #a 、b 為字串、數字等不變的資料型別時,如果a b 相同則 ,a b 對應的是同乙個id。

c = [1,2,3]

d = [1,2,3]

c == d  >> true  #雙等號比較的是兩個物件的值是否相同,不考慮它們的型別和id

c is d  >> false  #當物件為列表、元祖、字典等型別資料時即使相同但也會存放在不同的記憶體空間,所以c d 的id 不一樣

e = d

d is e  >> true  #當不管d 為什麼資料型別,e=d 就是把e 的資料指標指向d 的記憶體空間,也是e 與d 使用相同的資料,相同的id

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

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。

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

import

copy

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

#l2 = copy.copy(l1) 淺拷貝

l2 =copy.deepcopy(l1)

print(l1,'

>>>

',l2)

l2[3][0] = 1111

print(l1,"

>>>

",l2)

Python賦值 深淺copy

在 python 中,物件的賦值就是簡單的物件引用,這點和 c 不同,如下所示 a 1,2,hello python c b a在上述情況下,a 和 b 是一樣的,他們指向同一片記憶體,b 不過是 a 的別名,是引用.我們可以使用 b is a 去判斷,返回 true,表明他們位址相同,內容相同,也...

python賦值與深淺拷貝

參考文章 在python中,物件的賦值就是簡單的物件引用,這點和c 不同。如下 a 1 2,3 hello python c b a for i in range len a print id a i id b i all true print a b true這種情況下,b和a是一樣的,他們指向同...

Python賦值與深淺拷貝

a 1,2,3 b a a 4,5,6 賦新的值給 a a 4,5,6 b 1,2,3 a 的值改變後,b 並沒有隨著 a 變 a 1,2,3 b a a 0 a 1 a 2 4,5,6 改變原來 list 中的元素 a 4,5,6 b 4,5,6 a 的值改變後,b 隨著 a 變了 上面兩段 中,...