python深拷貝報錯 python深拷貝和淺拷貝

2021-10-11 22:38:13 字數 1226 閱讀 9605

在python中,物件賦值實際上是物件的引用。當建立乙個物件,然後把它賦給另乙個變數的時候,python並沒有拷貝這個物件,而只是拷貝了這個物件的引用

一般有三種方法,

alist=[1,2,3,["a","b"]]

(1)直接賦值,預設淺拷貝傳遞物件的引用而已,原始列表改變,被賦值的b也會做相同的改變

>>> b=alist

>>> print b

[1, 2, 3, ['a', 'b']]

>>> print alist;print b

[1, 2, 3, ['a', 'b'], 5]

[1, 2, 3, ['a', 'b'], 5]

(2)copy淺拷貝,沒有拷貝子物件,所以原始資料改變,子物件會改變

>>> import copy

>>> c=copy.copy(alist)

>>> print alist;print c

[1, 2, 3, ['a', 'b']]

[1, 2, 3, ['a', 'b']]

>>> print alist;print c

[1, 2, 3, ['a', 'b'], 5]

[1, 2, 3, ['a', 'b']]

>>> alist[3]

['a', 'b']

>>> print alist;print c

[1, 2, 3, ['a', 'b', 'cccc'], 5]

[1, 2, 3, ['a', 'b', 'cccc']] 裡面的子物件被改變了

(3)深拷貝,包含物件裡面的自物件的拷貝,所以原始物件的改變不會造成深拷貝裡任何子元素的改變

>>> import copy

>>> d=copy.deepcopy(alist)

>>> print alist;print d

[1, 2, 3, ['a', 'b']]

[1, 2, 3, ['a', 'b']]始終沒有改變

>>> print alist;print d

[1, 2, 3, ['a', 'b'], 5]

[1, 2, 3, ['a', 'b']]始終沒有改變

>>> alist[3]

['a', 'b']

>>> print alist;print d

[1, 2, 3, ['a', 'b', 'ccccc'], 5]

[1, 2, 3, ['a', 'b']]  始終沒有改變

python深拷貝報錯 python深拷貝和淺拷貝

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

python 深拷貝 Python深拷貝和淺拷貝!

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

python 淺拷貝 深拷貝

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