浅copy:当调用copy()函数时,在内存中会创建一个新的空间(列表,字典),里面存放的数据用的是之前的列表里的数据,当改变之前列表里的可变数据类型里的数据时,copy的另外的列表里的可变数据类型里的数据也会发生改变,即元素共用

# l1 = [1,2,3,['abc','hht']]
# l2 = l1.copy() //l2为一个新的列表[],因此内存地址与l1的不同
# l1[-1].append('abc')//l1[-1]:['abc','hht]为可变的数据类型
# print(l1)
# print(l2)
>>l1:[1,2,3,['abc','hht','asd']]
l2:[1,2,3,['abc','hht','asd']]

深copy:当调用deepcopy()函数时,在内存中也会创建一个新的空间,但与浅copy()不同,python对深copy进行了优化,即对不可变的数据类型继续用之前的数据,对于可变的数据类型(列表,字典,集合)则会从新创建一个新的,所以当修改之前的列表里的可变数据类型的数据时,新的列表里的可变的数据类型的数据并不会像浅copy()一样跟着改变。

# import copy
# l1 = [1,2,3,['abc','hht']]
# l2 = copy.deepcopy(l1)
# l1.append('asd')
# print(l1)
# print(l2)
>>l1: [1,2,3,['abc','hht',asd]]
l2: [1,2,3,[abc','hht']]

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。