python賦值 淺拷貝和深拷貝的區別

2021-10-20 04:39:49 字數 1210 閱讀 3250

1、直接賦值

2、淺拷貝

3、深拷貝

直接賦值,就是對物件的引用,複製的是物件的位址值,名字不同,操作的還是同乙個物件。

a =[[

1,2]

,[3,

4],5

]b = a

print

(b)# [[1,2],[3,4],5]

淺拷貝,就是拷貝的是父物件,不會拷貝到內部的子物件(物件中儲存的是位址值,這裡直接拷貝位址值,沒有遞迴拷貝)(b=a[:]也是淺拷貝)

import copya=[

1,2,

[3,4

],5]

b=copy.copy(a)

print

(b)# 結果為 [1,2,[3,4],5]

# 接下來我們更改a的資料6)

print

(a)print

(b)# 結果為 [1,2,[3,4],5,6]和[1,2,[3,4],5]

# 可以發現淺層的資料更改(第一層)並沒有讓b發生變化

# 接下來進行子物件資料(深層資料)的更改a[2

]7)print

(a)print

(b)# 結果為 [1,2,[3,4,7],5,6]和[1,2,[3,4,7],5]

# 可以發現b發生了改變

拷貝物件時,遇到位址值時,會再進行拷貝物件,而不是位址值,我理解我遞迴拷貝。

import copya=[

1,2,

[3,4

],5]

b=copy.deepcopy(a)

print

(b)# 結果為 [1,2,[3,4],5]

# 接下來我們更改a的資料6)

print

(a)print

(b)# 結果為 [1,2,[3,4],5,6]和[1,2,[3,4],5]

# 可以發現淺層的資料更改(第一層)並沒有讓b發生變化

# 接下來進行子物件資料(深層資料)的更改a[2

]7)print

(a)print

(b)# 結果為 [1,2,[3,4,7],5,6]和[1,2,[3,4],5]

一般情況下,會使用淺拷貝,淺拷貝具有以下優點:

1、花費時間少

2、花費記憶體少

3、效率高

淺拷貝 深拷貝和淺賦值 深賦值

include includeusing namespace std class string else 淺拷貝 也就是系統預設的拷貝,可寫可不寫。string const string s 預設的拷貝構造 深拷貝 string const string s string s2 s1 深賦值 str...

python賦值,淺拷貝和深拷貝

a 1 b a a 2 a 2 b 1 你將1賦給a變數,然後拷貝a中的值,將它賦給變數b。當稍 後將a中的值改變為2時,這不會影響b中的值。這是因為a和b 是不同的變數,儲存了不同的值。但列表不是這樣的。當你將列表賦給乙個變數時,實際上是將列表的 引用 賦給了該變數。引用是乙個值,指向某些資料。列...

Python 賦值 淺拷貝 深拷貝

賦值 a b,只拷貝了物件的引用,沒有拷貝內容。兩個物件的id一樣 淺拷貝 copy.copy 構造乙個新的復合物件,然後將子物件引用插入到原始物件的副本中。深拷貝 copy.deepcopy 構造乙個新的復合物件,然後遞迴地將子物件副本插入原始物件的副本。給個栗子 從這個栗子可以看出,對c進行修改...