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進行修改...