最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • Python深浅拷贝是什么

    正文概述    2020-03-17   154

    Python深浅拷贝是什么

    一、浅拷贝

    浅拷贝是对一个对象的顶层拷贝,通俗地讲就是:拷贝了引用,并没有拷贝内容。

    a = [1,2,3]
    print(id(a))
    b=a
    print(b)
    print(id(b))
    a.append(4)
    print(a)
    print(b)

    运行结果为:

    1965053928072
    [1, 2, 3]
    1965053928072
    [1, 2, 3, 4]
    [1, 2, 3, 4]

    二、深拷贝

     深拷贝是对于一个对象所有层次的拷贝,重新开辟内存地址。

    import copy
    a = [1,2,3]
    print(id(a))
    #使用copy模块
    b = copy.deepcopy(a)
    #打印b的内存地址
    print(id(b))
    a.append(4)
    print(a)
    print(b)

    运行结果为:

    2035157969672
    2035158105992
    [1, 2, 3, 4]
    [1, 2, 3]

    相关推荐:《Python视频教程》

    三、深浅拷贝对比

    import copy
    a = [1,2,3]
    b = [4,5,6]
    c = [a,b]
    d = c #直接赋值,浅拷贝
    print("c的内存地址为:%s"%id(c))
    print("d的内存地址为:%s"%id(d))
    #使用copy模块
    #深拷贝,重新开辟内存,并内容独立
    e = copy.deepcopy(c)
    #深拷贝,重新开辟内存,但是新内容里面仍保存原来的引用
    f = copy.copy(c)
    #打印e,f的地址
    print("e的内存地址为:%s"%id(e))
    print("f的内存地址为:%s"%id(f))
    #改变a的值
    a.append(44)
    #打印a,b,c,d,e,f
    print("a = %s"%a)
    print("b = %s"%b)
    print("c = %s"%c)
    print("d = %s"%d)
    print("e = %s"%e)
    print("f = %s"%f)

    运行结果为:

    c的内存地址为:2514746494856
    d的内存地址为:2514746494856
    e的内存地址为:2514746494920
    f的内存地址为:2514746494664
    a = [1, 2, 3, 44]
    b = [4, 5, 6]
    c = [[1, 2, 3, 44], [4, 5, 6]]
    d = [[1, 2, 3, 44], [4, 5, 6]]
    e = [[1, 2, 3], [4, 5, 6]]
    f = [[1, 2, 3, 44], [4, 5, 6]]

    说明:

    1.c和d的内存地址一样,说明是浅拷贝,两个引用指向的是同一块内存。

    2.c,e,f内存地址不一样,说明e和f都是深拷贝,都重新开辟的内存地址。

    3.在a追加了元素44之后,打印的e中并有追加44,说明深拷贝,内容独立。

    4.在a追加了元素44之后,打印的f中也追加44,说明f也重新开辟了内存,但是新内容里面保存的是原来的引用。

    四、copy对可变和不可变对象的不同

    1、可变类型使用copy

    import copy
    a = [1,2,3]
    b = copy.copy(a)
    print(id(a))
    print(id(b))
    a.append(4)
    print(a)
    print(b)

    运行结果为:

    1626677717832
    1626677715784
    [1, 2, 3, 4]
    [1, 2, 3]

    2、不可变类型使用copy

    import copy
    a = (1,2,3)
    b = copy.copy(a)
    print(id(a))
    print(id(b))

    运行结果为:

    2043444280704
    2043444280704

    总结:

    简单的赋值是浅拷贝。

    copy模块里面的copy()函数可以做一层深拷贝,虽然重新开辟了新的内存,但新内存里面仍然存放得是原来的引用。

    copy模块中的deepcopy()函数是深拷贝,重新开辟了了内存,而且内存中保存了新的值。


    起源地下载网 » Python深浅拷贝是什么

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元