Python学习日记(六) 浅深copy 浅深copy即完全复制一份和部分复制一份 浅深copy在列表数据量较大时不建议使用,比较消耗内存资源

浅深copy在列表数据量较大时不建议使用,比较消耗内存资源

1.赋值运算

l1 = [1,'s',[1,2,3]]
l2 = l1
print(id(l1),id(l2))    #34103880 34103880
l1[2][1] = 'h'          
print(id(l1),id(l2))    #34103880 34103880

l1和l2指向的是相同的内存地址

2.浅copy

l1 = [1,'s',[4,5,6,'s','h']]
l2 = l1.copy()
print(id(l1),id((l2)))  #5988936 6475464
print(id(l1[0]),id(l2[0]))  #8791394136912 8791394136912
print(id(l1[2][0]),id(l2[2][0]))    #8791410914224 8791410914224

浅copy即开辟一个新的内存空间放一个新的列表,但是里面的元素两边都是公用的

3.深copy

import copy
l1 = [1,'s',False,(2,3,4),{1,2,3},['a','b']]
l2 = copy.deepcopy((l1))
print(id(l1),id(l2))    #42180488 42179272
print(l1,l2)
#不可变数据类型
print(id(l1[0]),id(l2[0]))  #8791394136912 8791394136912
print(id(l1[1]),id(l2[1]))  #37970136 37970136
print(id(l1[2]),id(l2[2]))  #8791410383216 8791410383216
print(id(l1[3]),id(l2[3]))  #39259880 39259880
#可变数据类型
print(id(l1[4]),id(l2[4]))  #42293064 42293512
print(id(l1[5]),id(l2[5]))  #42685064 42685192

深copy是开辟一个新的列表内存空间,当列表中有不可变数据类型的元素时则与原列表共用,当列表有可变数据类型的元素时则会重新创建一个内存地址

面试题:

l1 = [1, 2, 3, 4, ['alex']]
l2 = l1[::]
l1[-1].append(666)  
print(l2)  #[1, 2, 3, 4, ['alex', 666]]

1.赋值运算

l1 = [1,'s',[1,2,3]]
l2 = l1
print(id(l1),id(l2))    #34103880 34103880
l1[2][1] = 'h'          
print(id(l1),id(l2))    #34103880 34103880

l1和l2指向的是相同的内存地址

2.浅copy

l1 = [1,'s',[4,5,6,'s','h']]
l2 = l1.copy()
print(id(l1),id((l2)))  #5988936 6475464
print(id(l1[0]),id(l2[0]))  #8791394136912 8791394136912
print(id(l1[2][0]),id(l2[2][0]))    #8791410914224 8791410914224

浅copy即开辟一个新的内存空间放一个新的列表,但是里面的元素两边都是公用的

3.深copy

import copy
l1 = [1,'s',False,(2,3,4),{1,2,3},['a','b']]
l2 = copy.deepcopy((l1))
print(id(l1),id(l2))    #42180488 42179272
print(l1,l2)
#不可变数据类型
print(id(l1[0]),id(l2[0]))  #8791394136912 8791394136912
print(id(l1[1]),id(l2[1]))  #37970136 37970136
print(id(l1[2]),id(l2[2]))  #8791410383216 8791410383216
print(id(l1[3]),id(l2[3]))  #39259880 39259880
#可变数据类型
print(id(l1[4]),id(l2[4]))  #42293064 42293512
print(id(l1[5]),id(l2[5]))  #42685064 42685192

深copy是开辟一个新的列表内存空间,当列表中有不可变数据类型的元素时则与原列表共用,当列表有可变数据类型的元素时则会重新创建一个内存地址

面试题:

l1 = [1, 2, 3, 4, ['alex']]
l2 = l1[::]
l1[-1].append(666)  
print(l2)  #[1, 2, 3, 4, ['alex', 666]]