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']

 

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