python 深拷貝和淺拷貝

2022-07-20 17:09:07 字數 1500 閱讀 8347

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...