直接賦值,新老變數同時指向同一片記憶體,對新變數所做的任何修改都會連帶修改老變數
#直接賦值,新老變數同時指向同一片記憶體,對新變數所做的任何修改都會連帶修改老變數
a =
b =a
#修改父物件,給父物件新增元素,同時影響 a 和 b
b[2] = [4, 5, 6]
print("
a=%s\tb=%s
" % (a, b)) #
a= b=
#修改內部子物件,給子物件新增元素,同時影響 a 和 b
print("
a=%s\tb=%s
" % (a, b)) #
a= b=
淺拷貝,拷貝父物件到新空間,物件的內部的子物件還是直接賦值,所以如果修改父物件,不會對原變數的父物件造成影響,但是修改如果內部的子物件,則會連帶修改原物件的子物件,因為共用乙個引用。
importcopy
a =
b = copy.copy(a) #
等同於 b = a.copy()
#修改父物件,給父物件新增元素,只影響 b,不影響 a
b[2] = [4, 5, 6]
print("
a=%s\tb=%s
" % (a, b)) #
a= b=
#修改物件內部子物件,給子物件新增元素,同時影響 a 和 b
print("
a=%s\tb=%s
" % (a, b)) #
a= b=
深拷貝,父物件和內部子物件都拷貝到新空間,對新變數所做的任何修改,不會對原變數 a 造成任何影響
#深拷貝,父物件和內部子物件都拷貝到新空間,對新變數所做的任何修改,不會對原變數 a 造成任何影響
import
copy
a =
b =copy.deepcopy(a)
#修改父物件,給父物件新增元素,只影響 b,不影響 a
b[2] = [4, 5, 6]
print("
a=%s\tb=%s
" % (a, b)) #
a= b=
#修改物件內部子物件,給子物件新增元素,只影響 b,不影響 a
print("
a=%s\tb=%s
" % (a, b)) #
a= b=
參考:python 直接賦值、淺拷貝和深度拷貝解析
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...