题目:阅读以下代码,写出对象b, c, d的值
import copy
a = [1, 2, 3, 4, ['a', 'b']]
b = a
c = copy.copy(a)
d = copy.deepcopy(a)
a.append(5)
a[4].append('c')
输出:
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']]
分析:
import copy
a = [1, 2, 3, 4, ['a', 'b']]
b = a # 引用,即"b is a",a变则b变,b变则a变
c = copy.copy(a) # 浅拷贝,只会拷贝父对象(父对象独立于a), 不会拷贝父对象中的子对象,子对象为引用关系,所以若a的子对象变则c变,但是父对象变c不会变
d = copy.deepcopy(a) # 深拷贝,完全拷贝,完全独立于原对象,a怎么变d也不变
a.append(5) # 改变父对象
a[4].append('c') # 改变父对象中的 ['a', 'b']子对象