賦值運算與深淺copy

2022-09-09 03:03:11 字數 1571 閱讀 9001

1、複製運算

l1 = [1,2,3,['

a','b'

]]l2 =l1

l1[0] = 111

print(l1) #

[111, 2, 3, ['a', 'b']]

print(l2) #

[111, 2, 3, ['a', 'b']]

l1[3][0] = '

hello

'print(l1) #

[111, 2, 3, ['hello', 'b']]

print(l2) #

[111, 2, 3, ['hello', 'b']]

#所以,對於賦值運算來說,l1與l2指向的是同乙個記憶體位址,所以他們是完全一樣的

2、拷貝  copy

l1 = [1,2,3]

l2 = l1.copy() #

copy,在記憶體中產生了新的位址

print(l1,l2) #

[1, 2, 3] [1, 2, 3]

print(id(l1),id(l2)) #

2137678556040 2137678553608a'

)print(l1,l2) #

[1, 2, 3] [1, 2, 3, 'a']

l3 = [1,2,[4,5,6],3]

l4 =l3.copy()

print(l3,id(l3)) #

[1, 2, [4, 5, 6], 3] 2535910547976

print(l4,id(l4)) #

[1, 2, [4, 5, 6], 3] 2535910565192a'

)print(l3,l4) #

[1, 2, [4, 5, 6], 3, 'a'] [1, 2, [4, 5, 6], 3]a'

)print(l3,l4) #

[1, 2, [4, 5, 6, 'a'], 3] [1, 2, [4, 5, 6, 'a'], 3]

print(id(l3[2]),id(l4[2])) #

2535910550408 2535910550408

#對於淺copy來說,第一層建立的是新的記憶體位址,而從第二層開始,

#指向的都是同乙個記憶體位址,所以,對於第二層以及更深的層數來說,保持一致性。

3、深拷貝  deepcopy

import

copy

l1 = [1,2,[4,5,6],3]

l2 =copy.deepcopy(l1)

print(l1,id(l1)) #

[1, 2, [4, 5, 6], 3] 2773191650376

print(l2,id(l2)) #

[1, 2, [4, 5, 6], 3] 2773191650888a'

)print(l1,l2) #

[1, 2, [4, 5, 6, 'a'], 3] [1, 2, [4, 5, 6], 3]

#對於深copy來說,兩個是完全獨立的,改變任意乙個的任何元素(無論多少層),另乙個絕對不改變。

Python賦值 深淺copy

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

python深淺copy和賦值

基於引用和物件 python引用和物件分離 直接賦值 a b a,b兩個引用指向相同的物件 淺copy a為b的copy copy 新建 b的不可變子物件,共用可變子物件 深copy a為b的深copy copy 新建 b的所有子物件,兩者物件無關聯 詳細解析如下 在python中,物件賦值實際上是...

python 賦值 比較 深淺copy

物件的三個要素id,型別,值。id 指的是記憶體位址,id 相同則兩個物件完全相同 賦值運算,a b,指的是b 的id 與a 相同,b 的資料與a 指向相同的記憶體空間 is 判斷,返回true false,a is b 判斷a 與 b 的id 是否相同 判斷,等號兩邊的值相等 練習1a 123 b...