python的賦值、copy()、deepcopy()的區別

python的賦值、copy()、deepcopy()的區別

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

  • 1、賦值:對象賦值實際上是對象的引用。操作的是同一對象。
alist=[1,2,3,["a","b"]]

a = alist 

a.append("ouyoung")
print(alist)
print(a)

alist.append( '6959')
print(alist)
print(a)
print( id(alist),'*****',id(a)) 

******************************************************
[1, 2, 3, ['a', 'b'], 'ouyoung']
[1, 2, 3, ['a', 'b'], 'ouyoung']
[1, 2, 3, ['a', 'b'], 'ouyoung', '6959']
[1, 2, 3, ['a', 'b'], 'ouyoung', '6959']
2186853725320 ***** 2186853725320
  • 2、copy()淺複製  :沒有拷貝子對象,所以原始數據改變,子對象會改變
alist=[1,2,3,["a","b"]]
import copy
a =  copy.copy(alist)

a.append("ouyoung")
print('alist:',alist)
print('a:',a)

alist.append( '6959')
print('alist:',alist)
print('a:',a)

print( id(alist),'*****',id(a)) 


alist[3].append('cccc')
print('alist:',alist) 
print('a:',a)   # 此處 操作元數據的子對象    發生改變

**********************************************************************

alist: [1, 2, 3, ['a', 'b']]
a: [1, 2, 3, ['a', 'b'], 'ouyoung']
alist: [1, 2, 3, ['a', 'b'], '6959']
a: [1, 2, 3, ['a', 'b'], 'ouyoung']
2186852331656 ***** 2186853059016
alist: [1, 2, 3, ['a', 'b', 'cccc'], '6959']
a: [1, 2, 3, ['a', 'b', 'cccc'], 'ouyoung']
  • 3、deepcopy():包含對象裏面的自對象的拷貝,所以原對象的改變不會有深拷貝里任何子元素的改變。
alist=[1,2,3,["a","b"]]
import copy
a =  copy.deepcopy(alist)

a.append("ouyoung")
print('alist:',alist)
print('a:',a)

alist.append( '6959')
print('alist:',alist)
print('a:',a)

print( id(alist),'*****',id(a)) 


alist[3].append('cccc')
print('alist:',alist) 
print('a:',a)   # 此處 操作元數據的子對象    沒有發生改變
***********************************************************
alist: [1, 2, 3, ['a', 'b']]
a: [1, 2, 3, ['a', 'b'], 'ouyoung']
alist: [1, 2, 3, ['a', 'b'], '6959']
a: [1, 2, 3, ['a', 'b'], 'ouyoung']
2186853059016 ***** 2186853493960
alist: [1, 2, 3, ['a', 'b', 'cccc'], '6959']
a: [1, 2, 3, ['a', 'b'], 'ouyoung']

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章