Python 直接賦值 淺拷貝和深度拷貝解析

2021-09-26 06:49:32 字數 959 閱讀 6381

參考:python 直接賦值、淺拷貝和深度拷貝解析

上面這個博文裡面的圖很形象。

直接賦值:其實就是物件的引用(別名)。

淺拷貝(copy):拷貝父物件,不會拷貝物件的內部的子物件。

深拷貝(deepcopy): copy 模組的 deepcopy 方法,完全拷貝了父物件及其子物件。

import copy

x =

print("original x")

print(x)

print('')

# 直接賦值:其實就是物件的引用(別名)。

a = x

# 淺拷貝(copy):拷貝父物件,不會拷貝物件的內部的子物件。

b = x.copy()

# 深拷貝(deepcopy): copy 模組的 deepcopy 方法,完全拷貝了父物件及其子物件。

c = copy.deepcopy(x)

x['add'] = "new" # 修改父物件x,直接賦值得到的a會被改變,淺拷貝得到的b和深拷貝得到的c都不會改變。

print("changed x")

print(x)

print('')

print("direct assignment of x")

print(a)

print('')

print("copy of x")

print(b)

print('')

print("deep copy of x")

print(c)

print('')

original x

changed x

direct assignment of x

copy of x

deep copy of x

python直接賦值 深拷貝和淺拷貝

python中,物件賦值實際上是物件的引用。當建立乙個物件,將其賦值給另乙個變數,python並沒有拷貝這個物件,而是拷貝了這個物件的引用。所以如果從單純的賦值語句來實現clone物件的話,那可能bug出現的也會莫名其妙.python中可以使用copy模組來複製物件.copy.copy 為淺拷貝,只...

直接賦值 淺拷貝和深拷貝

我們經常使用的 student s1 newstudent student s2 s1 直接物件賦值,它只是拷貝了物件引用位址而已,並沒有在堆記憶體重新生成乙個新的物件 如下圖 上面的s1和s2引用其實都是指向堆中同乙個student例項位址。所以如果改下s1中的任何成員變數 基本型別或者引用型別 ...

深拷貝 淺拷貝 直接賦值

使用直接賦值後兩個物件就完全一樣,隨著改變乙個物件的值另乙個物件的值也隨之改變。淺拷貝,物件中的值型別互補影響,但是引用型別 string雖然是引用型別但特殊存在類值型別 隨著乙個物件的值改變另乙個也會改變。深拷貝,兩個物件完全獨立互補影響 1 class program212 13 1415 pu...