深浅copy

赋值运算

l1 = [1,2,3,[22,33]]
l2 = l1
l1.append('666')

print(l1)
print(l2)

 

浅copy

1 l1 = [1,2,3,[22,33]]
2 l3 = l1.copy()           #新开辟了一个空间,存放的是对l1 copy出来的列表,内含l1内元素
3 l1.append('666')         #l1新增元素不在开辟的空间中
4 l1[-2].append('777')
5 l1[0] = 90             #l1列表的槽位指向了其他的对象,并不会改变copy列表中的对象
6 
#l1原元素存放在copy列表中,l1和l3槽位均指向copy出来的列表中的对象内存地址,所以l1和l3的id不同,但是l1和l3内容的id相同 7 print(l3) #[1, 2, 3, [22, 33, '777']] 8 9 print(l1) #[90, 2, 3, [22, 33, '777'], '666']

 

深copy

 

 1 import copy
 2 
 3 l1 = [1,2,3,[22,33]]
 4 l2 = copy.deepcopy(l1)
 5 #python对深copy做了优化,将copy列表中,不可变数据类型沿用copy列表,可变数据类型新创建一个(不同id)
 6 
 7 l1.append('666')
 8 l1[-1].append(90)
 9 
10 print(l1) #[1, 2, 3, [22, 33, 90]]
11 print(l2) #[1, 2, 3, [22, 33]]

 

 

 总结

深copy会在内存中开辟新空间,将原列表以及列表里面的可变的数据类型重新创建一份,不可变的数据类型则沿用之前的

相关面试题

l1 = [1,2,3,[22,33]]
l2 = l1[:] #切片为浅copy l1[-1].append('66') print(l1) #[1, 2, 3, [22, 33, 90, '66']]  print(l2) #[1, 2, 3, [22, 33, 90, '66']]
原文地址:https://www.cnblogs.com/zyiy/p/12521400.html