一、基础概念 1、直接赋值:其实就是对象的引用(别名)。
2、浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。
3、深拷贝(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 ) print( b ) print( c ) print( d )
输出: ([1, 2, 3, 4, ['a', 'b', 'c'], 5]) ([1, 2, 3, 4, ['a', 'b', 'c'], 5]) ([1, 2, 3, 4, ['a', 'b', 'c']]) ([1, 2, 3, 4, ['a', 'b']])
三、代码分析 (1)b采用引用赋值,会随着原来被引用对象的改变而改变。 (2)a.append(5)语句修改父对象,c浅拷贝不会改变,a[4].append('c')语句修改子对象,c跟着改变。 (3)而d采用深拷贝,无论父对象还是父对象中的子对象改变,都不会随着改变。