python中深淺拷貝

2022-09-14 02:39:11 字數 1631 閱讀 4734

先弄懂下面概念

變數 --引用--物件--(可變物件,不可變物件)-切片-拷貝(淺拷貝,深拷貝)

變數是乙個系統表的元素,擁有指向物件的鏈結的空間

物件是被分配的一塊記憶體,儲存其所代表的值

引用是自動形成的從變數到物件的指標

在python中不可變物件知:一旦建立就不可修改物件,包括字元創,元組,數字

在python中可變物件是指:可以修改的物件,包括:列表,字典

1.不可變物件的賦值

a的值發生改變,b不會跟著改變

a = 1b =a

print

(a)print

(b)a = 3

print

(a)print

(b)結果:11

31

2.可變物件的賦值

a發生改變,b也跟著改變

a = [1,2]

b =a

print

(a)print

(b)a[0] = 3

print

(a)print

(b)結果:

[1, 2]

[1, 2]

[3, 2]

[3, 2]

要想b的值不會改變,就要用到copy模組

3.深淺拷貝

淺拷貝:只拷貝頂級的物件,或者說:父級物件

深拷貝:拷貝所有物件,頂級物件以及巢狀物件。或者說:父級物件以及子物件

import

copy

#第二種,字典中有巢狀

d = ,

'job

':['

it','hr'

]}c1 =copy.copy(d)

c2 =copy.deepcopy(d)

print(id(d),id(c1),id(c2)) #

31157416 31940256 35946856d['

job'][0] = '

tester

'print

(d,c1,c2)

#, 'job': ['tester', 'hr']}

#, 'job': ['tester', 'hr']}

#, 'job': ['it', 'hr']}

源物件修改值的時候,淺拷貝的值跟著改變,深拷貝的值沒變

import

copy

#第二種,字典中有巢狀

d = ,

'job

':['

it','hr'

]}c1 =copy.copy(d)

c2 =copy.deepcopy(d)

print(id(d),id(c1),id(c2)) #

31157416 31940256 35946856d['

job'][0] = '

tester

'print

(d,c1,c2)

#, 'job': ['tester', 'hr']}

#, 'job': ['tester', 'hr']}

#, 'job': ['it', 'hr']}

源物件修改值的時候,淺拷貝的值跟著改變,深拷貝的值沒變

結論:

Python 中的深淺拷貝

python 中的物件之間賦值時,時按照引用傳遞,如果需要拷貝物件 需要使用標準庫中的copy模組 1.copy.copy淺拷貝 只拷貝父物件,不會拷貝物件的內部的子物件 2.copy.deepcopy深拷貝 拷貝物件及其子物件 示例 encoding utf 8 import copy a 1,2...

python中的深淺拷貝

深淺拷貝 定義 1.淺拷貝 拷貝了最外層的物件,內部的元素只拷貝了乙個引用 2.深拷貝 外層的物件和內部的元素都拷貝 賦值 了一遍 術語 1.變數 是乙個系統表的元素,擁有指向物件的連線空間 2.物件 會在記憶體中占用一塊空間 3.引用 是自動形成的從變數到物件的指標 首位址,引用 4.型別 物件型...

python中深淺拷貝學習

好記性不如爛筆頭。對於常數的拷貝,類似於數值的位址是一定,當進行賦值時,先共用乙個記憶體,如果一方修改了內容,則該方的位址改變,從而使得兩個變數不再相同,即一方修改另一方不會修改。a 2 b a print a b format a,b result a 2,b 2 print id a id b ...