Python 之深拷贝与浅拷贝

变量最终是存储于内存中的,存储于内存内的一块空间之中
  • 假设每个变量有两种存储可能
    A 存储一个指向其他变量的指针
    B 存储一个值(数字,字符之类的具体值)
深拷贝是将内存中A类(指针类)指向最终的值,复制到其他内存区块中
浅拷贝只是复制指针,指向内存区块
import copy

def fun3():
    print("深拷贝 浅拷贝(默认)")
    alist = [1, 2, 3, ["a", "b"]]
    # 浅拷贝
    c = copy.copy(alist)
    # 深拷贝
    d = copy.deepcopy(alist)
    # 普通赋值
    e = alist
    print(id(alist))
    print(id(c))
    print(id(d))
    print(id(e))
    print(alist is c)
    print(alist is d)
    print(alist is e)

    print("----- 接下来看神操作")

    # a = ["3"]
    # a = "3"
    a = 3
    # b = a
    b = copy.deepcopy(a)
    # b= copy.copy(a)
    print(id(a))
    print(id(b))
    print(a is b)
    '''
        所以综上所述,对于数字和字符串的赋值、浅拷贝、深拷贝在内存当中用的都是同一块地址。
        对于浅拷贝,字典、列表、元组等类型,它们只拷贝第一层地址
        对于深拷贝,它会拷贝多层,
        将第二层的列表也拷贝一份,如果还有第三层嵌套,那么第三层的也会拷贝,
        但是对于里面的最小元素
        比如数字和字符串等基础类型
        按照python的机制,它们会共同指向同一个位置,它的内存地址是不会变的。
    
    
        区别于浅拷贝只拷贝顶层引用,深拷贝会逐层进行拷贝,直到拷贝的所有引用都是不可变引用为止。
        id() 函数就是返回对象的内存地址
        is 是比较两个变量的对象引用是否指向同一个对象
        不要和 == 混了,== 是比较两个变量的值是否相等
    '''

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值