• python的深浅拷贝


    浅拷贝后,改变原始对象中为可变类型的元素的值,会同时影响拷贝对象;改变原始对象中为不可变类型的元素的值,不会响拷贝对象。

    地址是完全一致的。

    #定义一个列表,第一个元素是可变类型
    >>> A = [[2],'fei',90]
    #浅拷贝 >>> B = copy.copy(A)
    #对象地址是否相同 >>> A is B False
    #改变第一个可变类型的值,查看复制对象变化 >>> A[0]= 2 >>> A [[2], 'fei', 90]
    #复制对象也跟着改变了 >>> B [[2], 'fei', 90]
    #改变第二个不可变类型的值,查看复制对象变化 >>> A[1] = 'anne' >>> A [[2], 'anne', 90]
    #复制对象没有改变 >>> B [[2], 'fei', 90]

    a 和 b 完全拷贝了父对象及其子对象,两者是完全独立的。
    深拷贝,除了顶层拷贝,还对子元素也进行了拷贝。
    经过深拷贝后,原始对象和拷贝对象所有的可变元素地址都没有相同的了。

    #深拷贝
    >>> C = copy.deepcopy(A)
    #改变第一个元素,查看复制元素变化 >>> A[0]= 3 >>> A [[3], 'fei', 90]
    #复制元素不变,对复制元素没影响 >>> C [[1], 'fei', 90]
    #改变第二个元素,查看复制元素变化
    >>> A[1] = 'Anne' 
    >>> A
    [[3], 'Anne', 90]

    >>> C
    [[2], 'fei', 90]

    很显然:从数据的不可变而言,浅拷贝是面向不可变类型的;而深拷贝是面向可变类型的处理

    注意:这两者与赋值引用不同,在赋值引用中无可变与不可变的类型之分。一旦一个数据改变同类型的也会改变。

  • 相关阅读:
    [Python3网络爬虫开发实战] 3.1.3-解析链接
    pusher-http-go
    gopush-cluster 架构
    消息队列 redis vs nsq
    redis资料
    golang+websocket
    golang之flag.String
    Linux环境下安装mysql
    golang版的crontab
    golang实现wav文件转换为mp3文件
  • 原文地址:https://www.cnblogs.com/topass123/p/12735192.html
Copyright © 2020-2023  润新知