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