赋值
传个引用(相当于多了个别名)
重复
深层重复使用的是引用
L=[4,5,6]
X=L*2//简单重复非引用
Y=[L]*2 //列表的引用
//X=[4,5,6,4,5,6]
//Y=[[4,5,6],[4,5,6]]
L[1]=0
//X=[4,5,6,4,5,6] 没有改变
//Y=[[4,0,5],[4,0,5]] 因为是列表的引用所以改变了
copy
- 浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。
b = a[:]是浅copy
- 深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。
例:
import copy
a = [1, 2, 3, 4, ['a', 'b']] #原始对象
b = a #赋值,传对象的引用
c = copy.copy(a) #对象拷贝,浅拷贝
d = copy.deepcopy(a) #对象拷贝,深拷贝
a.append(5) #修改对象a
a[4].append('c') #修改对象a中的['a', 'b']数组对象
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']])
浅copy对于父对象的修改不会改变复制后的对象;但是对于子对象的修改会改变复制后的对象