如何复制对象
在python中很多时候需要复制对象,比如有一个列表记录了一些对象,现在想复制一份出来,如果这样使用肯定是不行的:a = [1, 2, 3]; b = a
,给a初始化一些值,然后让b和a引用同样的对象,这样使用会使得a和b都可以改变引用的对象,不能满足复制的要求。
有的人说了,可以使用列表自带的copy方法,这样就可以复制一个同样的列表了,是的,但是列表自带的copy方法是一个浅层复制,浅层复制可以理解为只在第一层进行复制,如果这个列表有嵌套的结构,那么copy也达不到要求。
现在需要找到一种可以完全复制一个对象的方法,如果熟悉对象的结构是可以自己复制该对象的,但是这样是在重复造轮子,其实python早就想好了这个问题的解决办法,在python中有一个模块copy
,这个模块可以实现浅层复制和深层复制,看一看怎么使用:
"""浅层copy与深层copy
浅层copy: copy.copy()
深层copy: copy.deepcopy()
the statistics of this file:
lines(count) understand_level(h/m/l) classes(count) functions(count) fields(count)
000000000042 ----------------------l 00000000000000 0000000000000000 ~~~~~~~~~~~~3
"""
import time
import copy
__author__ = '与C同行'
single_sheet_list = ['a', 'b', 'c']
double_sheet_list = [['a', 'b', 'c'],
['d', 'e', 'f']]
deep_list = [['g', 'h'],
['i', 'j']]
if __name__ == '__main__':
print(f'当前时间:{time.ctime()}')
print()
print('浅层复制:')
single_sheet_list_copy = copy.copy(single_sheet_list)
single_sheet_list_copy[0] = 'aa'
print(single_sheet_list)
print(single_sheet_list_copy)
print()
double_sheet_list_copy = copy.copy(double_sheet_list)
double_sheet_list_copy[0][0] = 'aaa'
print(double_sheet_list)
print(double_sheet_list_copy)
print('深层复制:')
deep_copy = copy.deepcopy(deep_list)
deep_copy[0][0] = 'ggg'
print(deep_list)
print(deep_copy)
结果如下:
浅层复制只是复制第一层的对象,这种复制使用起来要十分注意,否则一不小心就会出现意料之外的结果,深层复制可以复制到最后一层对象,这种复制使用起来会使得结果符合自己的意图。