Python中克隆对象的方法有两种,一种是使用copy模块的copy()函数,另一种是使用copy.deepcopy()函数。
copy.copy()函数可以用来复制一个对象,但不会复制它的子对象,也就是说它只复制一个对象的最外层,而不会复制其子对象。
import copy # 定义一个对象 obj = {'a': 1, 'b': [1, 2, 3]} # 使用copy.copy()函数复制 obj_copy = copy.copy(obj) # 修改原始对象 obj['a'] = 2 obj['b'][0] = 0 # 打印结果 print('原始对象:', obj) print('复制对象:', obj_copy)
运行结果如下:
原始对象: {'a': 2, 'b': [0, 2, 3]} 复制对象: {'a': 1, 'b': [1, 2, 3]}
从上面的结果可以看出,使用copy.copy()函数复制后,原始对象的a属性发生了改变,但复制对象的a属性没有发生改变,而原始对象的b属性的第一个元素发生了改变,但复制对象的b属性的第一个元素没有发生改变,这就说明copy.copy()函数只复制了最外层的对象,而不会复制其子对象。
copy.deepcopy()函数可以用来复制一个对象,它不仅会复制最外层的对象,还会复制其子对象。
import copy # 定义一个对象 obj = {'a': 1, 'b': [1, 2, 3]} # 使用copy.deepcopy()函数复制 obj_copy = copy.deepcopy(obj) # 修改原始对象 obj['a'] = 2 obj['b'][0] = 0 # 打印结果 print('原始对象:', obj) print('复制对象:', obj_copy)
运行结果如下:
原始对象: {'a': 2, 'b': [0, 2, 3]} 复制对象: {'a': 1, 'b': [1, 2, 3]}
从上面的结果可以看出,使用copy.deepcopy()函数复制后,原始对象的a属性发生了改变,但复制对象的a属性没有发生改变,而原始对象的b属性的第一个元素发生了改变,但复制对象的b属性的第一个元素也没有发生改变,这就说明copy.deepcopy()函数不仅复制了最外层的对象,还复制了其子对象。
本文链接:http://task.lmcjl.com/news/11418.html