python 基础知识点二

深浅copy

1对于赋值运算来说,l1与l2指向的是同一个内存地址,所以他们是完全一样的。

l1 = [1,2,3,['barry','alex']]
l2 = l1

l1[0] = 111
print(l1,id(l1))  # [111, 2, 3, ['barry', 'alex']] 112431152
print(l2,id(l2))  # [111, 2, 3, ['barry', 'alex']] 112431152

l1[3][0] = 'wusir'
print(l1,id(l1))  # [1, 2, 3, ['wusir', 'alex']] 112431152
print(l2,id(l2))  # [1, 2, 3, ['wusir', 'alex']] 112431152

2对于浅copy(copy)来说,只是在内存中重新创建了开辟了一个空间存放一个新列表(内存地址不同),但是新列表中的元素与原列表中的元素是公用的,即元素的内存地址是相同的。

l1 = [1, '太白', True, (1,2,3), [22, 33]]
l2 = l1.copy()

print(id(l1), id(l2))  #   112496688    112475312

print(id(l1[-2]), id(l2[-2])) #35243432 35243432

print(id(l1[-1]),id(l2[-1]))  #112410096 112410096

3.对于深copy(deepcopy)来说,列表是在内存中重新创建的,列表中可变的数据类型是重新创建的,列表中的不可变的数据类型是公用的。

import copy
l1 = [1, 'alex', True, (1,2,3), [22, 33]]
l2 = copy.deepcopy(l1)
# print(id(l1), id(l2))   #  112627760   112606384
print(id(l1[0]),id(l2[0]))  # 1521669168 1521669168
print(id(l1[-1]),id(l2[-1])) # 112999960 112999880  #元素为列表 为不可哈希(可变类型)
print(id(l1[-2]),id(l2[-2])) # 6735272 6735272

  

  

猜你喜欢

转载自www.cnblogs.com/zenghui-python/p/10277870.html