python浅拷贝:只拷贝列表等第一层地址,并且创建内存空间 比如创建一个list = [1,2[3,4]] list[0]的内存地址为0001,list[1]的内存地址为0002,list[3]的内存地址为0003,list[2][0]的内存地址为00031,list[2][1]的内存地址为00032 list1 = list.copy() list1 只拷贝list所有第一层的内存数据的内存地址 0001,0002,0003,而因为0003是一个列表,是一个整体 是list的第三个元素,list1对0003里面的列表元素00031,00032为间接指向,所以当list1更改list1[2]的数据时,由于list1 和list 同时指向0003这块内存地址,所以list1和list都会同时改变,,0003,0002,0001为列表第一层元素,copy的list1对这两个元素为直接指向,所以更改0003,0002,0001内存地址里面的内容,会重新分配内存地址,不会更改list列表里面的元素 >>> a = [1,2,[1,2]] >>> b = a[:] >>> print b [1, 2, [1, 2]] >>> b[2]=0 >>> print b [1, 2, 0] >>> print a [1, 2, [1, 2]] >>> 深拷贝: import copy list = [1,2,[3,4]] list1 = copy.deepcopy(list) 更改list1里面的任意值 list 和list1 互不影响
|
|