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
posted @ 2020-03-31 10:41  zhuang6  阅读(142)  评论(0)    收藏  举报