python3中賦值 深複製和淺複製的區別

2021-09-11 02:27:08 字數 839 閱讀 6175

1、直接賦值:預設淺複製傳遞物件的引用而已,原始列表改變,被賦值的b也會做相同的改變。其實就是物件的引用(別名)

2、淺複製(copy):copy方法為淺複製,沒有複製子物件,所以原始資料改變,子物件會改變。

3、深複製(deepcopy):copy 模組的 deepcopy 方法,包含物件裡面的自物件的複製,所以原始物件的改變不會造成深複製裡任何子元素的改變。

例子:

#!/usr/bin/python

# -*-coding:utf-8 -*-

import copy

a = [1, 2, 3, 4, ['a', 'b']] #原始物件

b = a #賦值,傳物件的引用

c = copy.copy(a) #物件拷貝,淺拷貝

d = copy.deepcopy(a) #物件拷貝,深拷貝

print( 'a = ', a )

print( 'b = ', b )

print( 'c = ', c )

print( 'd = ', d )

結果:

a =  [1, 2, 3, 4, ['a', 'b', 'c'], 5]

b = [1, 2, 3, 4, ['a', 'b', 'c'], 5]

c = [1, 2, 3, 4, ['a', 'b', 'c']]

d = [1, 2, 3, 4, ['a', 'b']]

例子引用:

淺拷貝 深拷貝和淺賦值 深賦值

include includeusing namespace std class string else 淺拷貝 也就是系統預設的拷貝,可寫可不寫。string const string s 預設的拷貝構造 深拷貝 string const string s string s2 s1 深賦值 str...

python3 深複製與淺複製

import json def deepclone dictvalue if isinstance dictvalue,list or isinstance dictvalue,set return deepclone v if type v name in list set tuple dict ...

Python3之淺拷貝和深拷貝

python中賦值語句不複製物件,而是在目標和物件之間建立繫結 bindings 關係。python3中有6種標準的資料型別,可分為可變型別和不可變型別。可變型別 list 列表 dictionary 字典 set 集合 不可變型別 number 數字 string 字串 tuple 元組 淺拷貝由...