python 深浅烤贝
深浅烤贝
# 深浅烤贝 from copy import copy,deepcopy
赋值
l = [1, [2, 3, 4], {'name': 'jsb'}, 4, 5]
l2 = l
print(l2)
l2[0] = 88
print(l2)
print(l)
# l和l2指向的是同一个内存地址
浅烤贝
l = [1, [2, 3, 4], {'name': 'jsb'}, 4, 5]
l3 = copy(l)
print(l3)
l3[0] = 88
print(l3) # [88, [2, 3, 4], {'name': 'jsb'}, 4, 5]
print(l) # [1, [2, 3, 4], {'name': 'jsb'}, 4, 5]
l3[1][0] = 88
print(l3) # [1, [88, 3, 4], {'name': 'jsb'}, 4, 5]
print(l) # [1, [88, 3, 4], {'name': 'jsb'}, 4, 5]
# 浅拷贝l列表中的列表或字典存的是地址, 浅拷贝指向的还是同一个地址, 所以结果如上
深烤贝
l = [1, [2, 3, 4], {'name': 'jsb'}, 4, 5]
l4 = deepcopy(l)
l4[0] = 88
l4[1][0] = 88
print(l4) # [88, [88, 3, 4], {'name': 'jsb'}, 4, 5]
print(l) # [1, [2, 3, 4], {'name': 'jsb'}, 4, 5]
# 深拷贝可以说和l没有任何的关系了, 不管l4咋变l都不会变
注意
""" 注意: 在深拷贝中, l中的列表和l4中的列表地址是不同的, 但是为什么, 我们打印的列表中的数字地址还是一样的 因为有小整数池的存在, 所以内存地址是一样的 小整数池: 1. 为什么要有小整数池 Python为了优化速度, 使用小整数池, 避免为整数频繁申请和销毁内存空间 2. Python对小整数池的定义是[-5, 256]这些整数对象是提前建立好的, 不会被垃圾回收 大整数池: 1. 为什么要有大整数池 终端没执行一次, 大整数都重新创建, 而在pycharm中, 每次运行是所有的代码都加载到内存中, 属于一个整体 2. 定义: 即处于一个代码块的大整数是同一个对象 """ class C1(object): a = 100 b = 100 c = 1000 d = 1000 class C2(object): a = 100 b = 1000 print(C1.a is C1.b) # True print(C1.a is C2.a) # True print(C1.c is C1.d) # True print(C1.b is C2.b) # False

浙公网安备 33010602011771号