python中深拷貝淺拷貝問題

2022-09-21 17:27:14 字數 925 閱讀 9613

python中深拷貝淺拷貝問題

深拷貝淺拷貝只是針對python中的可變物件才有區別的(即列表、字典、集合),對於不可變物件(即字串、數字、元組)不管是賦值還是拷貝都是給的位址,修改後的新值存在新的位址上。

1、淺拷貝

copy庫的copy()方法;列表自帶的copy()方法;切片;工廠函式(如list/dict/set)均為淺拷貝

淺拷貝中,外殼是新的,裡面的不可變元素都是位址的拷貝

if __name__ == "__main__":

a = [1,'2',[3,4],(5,6)]

b = a[:]

a[0] = 9

a[2][0] = 10

for i in range(len(a)):

2、深拷貝

copy庫的deepcopy()函式是深拷貝

深拷貝中外殼也是新的,與淺拷貝不同的是,裡面的可變元素不是單純的拷貝位址,而是建立建立新的物件將裡面的值一一複製過來

import copy

if __name__ == "__main__":

a = [1,'2',[3,4],(5,6)]

b = copy.deepcopy(a)

a[0] = 9

a[2][0] = 10

for i in range(len(a)):

3、賦值

賦值跟拷貝不太一樣,賦值相對於淺拷貝來說唯一的不同點就是,外殼位址也是相同的

if __name__ == "__main__":

a = [1,'2',[3,4],(5,6)]

b = a

a[0] = 9

a[2][0] = 10

for i in range(len(a)):

python 淺拷貝 深拷貝

直接賦值 其實就是物件的引用 別名 淺拷貝 copy 拷貝父物件,不會拷貝物件的內部的子物件。深拷貝 deepcopy copy 模組的 deepcopy 方法,完全拷貝了父物件及其子物件。usr bin python import copy a 1,2,3,4,a b 原始物件 b a 賦值,傳物...

python深拷貝 淺拷貝

在python中,物件賦值實際上是物件的引用。當建立乙個物件,然後把它賦給另乙個變數的時候,python並沒有拷貝這個物件,而只是拷貝了這個物件的引用 一般有三種方法,alist 1,2,3,a b 1 直接賦值,傳遞物件的引用而已,原始列表改變,被賦值的b也會做相同的改變 alist 1,2,3,...

python 深拷貝 淺拷貝

淺拷貝是對於乙個物件的頂層拷貝 通俗的理解是 拷貝了引用,並沒有拷貝內容 深拷貝是對於乙個物件所有層次的拷貝 遞迴 拷貝字典 值相當於鍵的引用 所以copy.copy 為淺拷貝 淺拷貝對不可變型別和可變型別的copy不同 copy.copy對於可變型別,會進行淺拷貝 copy.copy對於不可變型別...