示例代码:
# This Python file uses the following encoding: utf-8 """ 直接赋值:其实就是对象的引用(别名)。 浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。 深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。 """ import copy a = [1, 2, 3, 4, ['a', 'b']] # 原始对象 b = a # 赋值引用,a 和 b 都指向同一个对象。【要改变都改变】 c = copy.copy(a) # 浅拷贝, a 和 b 是一个独立的对象,但他们的子对象还是指向统一对象(是引用)。【子对象改变就都改变】 d = copy.deepcopy(a) # 深度拷贝, a 和 b 完全拷贝了父对象及其子对象,两者是完全独立的。【两者没任何关系】 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] # 输出数组a b = [1, 2, 3, 4, ['a', 'b', 'c'], 5] # 因为b与a指向同一对象,b的值就是a的值 c = [1, 2, 3, 4, ['a', 'b', 'c']] # c为a的浅拷贝,a中的子对象修改了,所以c的子对象也修改了,其他无改变 d = [1, 2, 3, 4, ['a', 'b']] # d与a没关系,a改变d也不会改变