python基礎 深淺拷貝copy

2022-07-01 11:27:07 字數 2482 閱讀 4878

拷貝是音譯的詞,其實他是從copy這個英文單詞音譯過來的,那什麼是copy? copy其實就是複製乙份,也就是所謂的抄乙份。深淺copy其實就是完全複製乙份,和部分複製乙份的意思。

1.賦值運算

1 l1 = [1,2,3,['

barry

','alex']]

2 l2 =l1

34 l1[0] = 111

5 print(l1) # [111, 2, 3, ['

barry

', '

alex']]

6 print(l2) # [111, 2, 3, ['

barry

', '

alex']]

78 l1[3][0] = '

wusir

'9 print(l1) # [111, 2, 3, ['

wusir

', '

alex']]

10 print(l2) # [111, 2, 3, ['

wusir

', '

alex

']]

不同與c、c++猶豫python不用靜態定義資料物件 如 int a1,a2;所以這裡不再是值的傳遞賦值,而python則是位址的共享。

2.淺拷貝:

1

#同一**塊下:

2 l1 = [1, '

太白', true, (1,2,3), [22, 33

]]3 l2 =l1.copy()

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

2713214524680

5 print(id(l1[-2]), id(l2[-2])) # 2547618888008

2547618888008

6 print(id(l1[-1]),id(l2[-1])) # 2547620322952

254762032295278

# 不同**塊下:

9 >>> l1 = [1, '

太白', true, (1, 2, 3), [22, 33

]]10 >>> l2 =l1.copy()

11 >>>print(id(l1), id(l2))

121477183162696

13 >>> print(id(l1[-2]), id(l2[-2

]))14

1477181814032

15 >>> print(id(l1[-1]), id(l2[-1

]))16

1477183162504

對於淺copy來說,只是在記憶體中重新建立了開闢了乙個空間存放乙個新列表,但是新列表中的元素與原列表中的元素是公用的。

3.深拷貝

# 同一**塊下

import copy

l1 = [1, '

alex

', true, (1,2,3), [22, 33

]]l2 =copy.deepcopy(l1)

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

2788324482440

2788324483016

print(id(l1[

0]),id(l2[0])) # 1470562768

1470562768

print(id(l1[-1]),id(l2[-1])) # 2788324482632

2788324482696

print(id(l1[-2]),id(l2[-2])) # 2788323047752

2788323047752

# 不同**塊下

>>>import copy

>>> l1 = [1, '

太白', true, (1, 2, 3), [22, 33

]]>>> l2 =copy.deepcopy(l1)

>>>print(id(l1), id(l2))

1477183162632

>>> print(id(0), id(0

))1470562736

>>> print(id(-2), id(-2

))1470562672

>>> print(id(l1[-1]), id(l2[-1

]))1477183162312

對於深copy來說,列表是在記憶體中重新建立的,列表中可變的資料型別是重新建立的,列表中的不可變的資料型別是公用的。

1 >>> l1 = [1, 2, 3, 4, ['

alex']]

2 >>> l2 =l1[::]

)4 >>>print(l2)

5 [1, 2, 3, 4, ['

alex

', 666

]]6 >>>print(l1)

7 [1, 2, 3, 4, ['

alex

', 666]]

面試題目

Python基礎 深淺拷貝

import copy num 0 copy num copy.copy num print these are normal copy center 60,print num,id num print copy num,id copy num print these are deep copy c...

python基礎之深淺拷貝

深淺拷貝 對於字串 str 數字 int 布林型別 bool 等型別深淺拷貝都是開闢新記憶體 對於列表 list 集合 set 字典 dict 深淺拷貝可變型別都一樣,如 1,2,3 對於列表 list 集合 set 字典 dict 存在巢狀的深淺拷貝不一樣,如 1,2,3,4,5,6 淺拷貝只拷貝...

python 深淺拷貝案例 python 深淺拷貝

深淺拷貝 對於 數字 和 字串 而言,賦值 淺拷貝和深拷貝無意義,因為其永遠指向同乙個記憶體位址 import copy a1 22255 a2 22255 print id a1 id a2 3428240 3428240 對於字典 元祖 列表 而言,進行賦值 淺拷貝和深拷貝時,其記憶體位址的變化...