傻子都能看懂的——Python的深拷贝与浅拷贝

题目:阅读以下代码,写出对象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']子对象

猜你喜欢

转载自blog.csdn.net/qq_38890412/article/details/106925435