python專門提供了一種拷貝機制,基於原物件建立乙個含有相同值的物件。拷貝有copy模組提供。講到拷貝就不得不講一下可變和不可變物件。
當該資料型別的對應變數的值發生了改變,那麼它對應的記憶體位址也會發生改變,對於這種資料型別,稱之為可變物件。
資料型別:list,set,dict
當該資料型別的對應變數的值發生了改變,那麼它對應的記憶體位址不發生改變,對於這種資料型別,稱之為可變資料型別。
資料型別:num,str,tuple等
是對於乙個物件的頂層拷貝,也就是說拷貝引用。
是對於乙個物件的內容拷貝。
那麼它們的異同在哪呢?
可變物件
不可變物件
淺拷貝拷貝外面的物件,裡面元素不拷貝
拷貝新物件
深拷貝物件和裡面的元素都拷貝
拷貝新物件
import copy
# 可變物件資料
change_variable=[1,2,45,6,0]
# 不可變物件資料
not_variable=(3,5,2,1,)
# 淺拷貝:拷貝引用(可變)
change_shallow_list=change_variable[:]
# 深拷貝:拷貝內容(可變)
change_deep_list=copy.deepcopy(change_variable)
# 淺拷貝:拷貝引用(不可變)
not_shallow_tuple=copy.copy(not_variable)
# 深拷貝:拷貝內容(不可變)
not_deep_tuple=copy.copy(not_variable)
# 當淺拷貝物件發生改變時
change_shallow_list[-1]='改變'
change_deep_list[1]='改變了'
# 當深拷貝物件發生改變時
try:
not_shallow_tuple[0]=111
except exception as f:
print(f,'\n元組不管是什麼拷貝,本身不可變')
try:
not_deep_tuple[-1]='深拷貝'
except exception as f:
print(f,'\n元組不管是什麼拷貝,本身不可變')
print('可變物件l:\t{}'.format(change_variable))
print('不可變物件t:\t{}'.format(not_variable))
print('淺拷貝可變物件:\t{}'.format(change_shallow_list))
print('深拷貝可變物件:\t{}'.format(change_deep_list))
print('淺拷貝不可變物件:\t{}'.format(not_shallow_tuple))
print('深拷貝不可變物件:\t{}'.format(not_deep_tuple))
python 深拷貝 Python深拷貝和淺拷貝!
在python中,物件賦值實際上是物件的引用。當建立乙個物件,然後把它賦給另乙個變數的時候,python並沒有拷貝這個物件,而只是拷貝了這個物件的引用 一般有三種方法,alist 1,2,3,a b 1 直接賦值 b alist,預設淺拷貝傳遞物件的引用而已,原始列表改變,被賦值的b也會做相同的改變...
Python 深拷貝和淺拷貝
淺拷貝只拷貝了引用,並沒有拷貝內容,相當於把原來的引用複製了乙份給新的變數 深拷貝是將原來的值複製了乙份到新的地方 in 30 a 1,2,3 in 31 b a in 32 id a out 32 140618626865352 in 33 id b out 33 140618626865352 ...
python深拷貝和淺拷貝
copy.copy 淺拷貝 只拷貝父物件,不會拷貝物件的內部的子物件。比深拷貝更加節省記憶體 copy.deepcopy 深拷貝 拷貝物件及其子物件 用乙個簡單的例子說明如下 import copy公升 a 1,2,3,4,a b c b a c copy.copy a d copy.deepcop...