标准类库-数据类型之copy-深拷贝浅拷贝操作

 

by:授客 QQ:1033553122

Python中赋值并不会拷贝对象,只是创建目标和对象的绑定关系。

copy.copy(x)

返回x的浅拷贝

copy.deepcopy(x)

返回x的深拷贝

exception copy.error

抛出模块指定的错误

例子

>>> import copy

>>> lista = [["hi", "shouke"], 2018]

>>> listb = copy.copy(lista)

>>> id(lista), id(listb)

(40713288, 51361160)

>>> for item in lista:

...      print(id(item))

...

51361032

3944400

>>> for item in listb:

...      print(id(item))

...

51361032

3944400

如上,浅拷贝,拷贝的对象及被拷贝对象(例中分别为listb, lista)的id都不一样,但是两者所拥有的元素对象的id值是一样的


对比试验

>>> listb = copy.deepcopy(lista)

>>> for item in listb:

...
     print(id(item))

...

51300488

3944400

如上,深拷贝,拷贝的对象及被拷贝对象(例中分别为listb, lista)的id都不一样,两者所拥有的元素对象的id值:

1)如果是不可变对象,比如例中的整数,两者的id一样

2)如果是可变对象,比如例子中的列表(["hi",
"shouke"]),则两者的id值不一样。


修改被拷贝对象的元素对象

>>> lista[0].append('nihao')

>>> lista

[['hi', 'shouke', 'nihao'], 2018]

>>> listb

[['hi', 'shouke'], 2018]

如上,深拷贝,拷贝的对象及被拷贝对象两者互不影响


对比试验

>>> listb = copy.copy(lista)

>>> lista[0].remove('nihao')

>>> lista

[['hi', 'shouke'], 2018]

>>> listb

[['hi', 'shouke'], 2018]

>>> lista[0].append('nihao')

>>> lista

[['hi', 'shouke', 'nihao'], 2018]

>>> listb

[['hi', 'shouke', 'nihao'], 2018]

如上,类似c语言,浅拷贝,被拷贝对象拥有可变元素对象时,拷贝的对象及被拷贝对象两者会相互影响

Python 标准类库-数据类型之copy-深拷贝浅拷贝操作的更多相关文章

  1. python 标准类库-数据类型之集合-容器数据类型

    标准类库-数据类型之集合-容器数据类型   by:授客 QQ:1033553122 Counter对象 例子 >>> from collections import Counter ...

  2. JS Object Deep Copy & 深拷贝 & 浅拷贝

    JS Object Deep Copy & 深拷贝 & 浅拷贝 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Refe ...

  3. Python深复制浅复制or深拷贝浅拷贝

    1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象.(比深拷贝更加节省内存)2. copy.deepcopy 深拷贝 拷贝对象及其子对象 用一个简单的例子说明如下: >& ...

  4. python 标准类库-并行执行之subprocess-子进程管理

    标准类库-并行执行之subprocess-子进程管理 by:授客QQ:1033553122 1.使用subprocess模块 以下函数是调用子进程的推荐方法,所有使用场景它们都能处理.也可用Popen ...

  5. python: 序列化/反序列化及对象的深拷贝/浅拷贝

    一.序列化/反序列化 python中内置了很多序列化/反序列化的方式,最常用的有json.pickle.marshal这三种,示例用法如下: import json import pickle imp ...

  6. python集合增删改查,深拷贝浅拷贝

    集合 集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的.以下是集合最重要的两点: 去重,把一个列表变成集合,就自动去重了. 关系 ...

  7. Python 标准类库- 因特网协议于支持之UUID

    标准类库- 因特网协议于支持之UUID by:授客 QQ:1033553122   测试环境 python3 UUID生成函数定义 uuid.getnode() 获取一个表示硬件地址的48位正整数.第 ...

  8. Python 标准类库 - 因特网协议与支持之socketserver

    标准类库 - 因特网协议与支持之socketserver by:授客 QQ:1033553122 socketserver 模块,简化网络服务编写任务. 创建服务的步骤 1  通过子类化BaseReq ...

  9. Python 标准类库-Windows特殊服务之msvcrt

    标准类库-Windows特殊服务之msvcrt   by:授客 QQ:1033553122 广告:出售自研自动化小平台(无需编码也可用),有需要请联系 测试环境 win7 64位 Python 3.4 ...

随机推荐

  1. Ubuntu下OpenCV版本切换

    1.假如安装了opencv以下两个版本: opencv-2.4.13 opencv-3.2.0 2.安装目录分别为: /usr/local/opencv-2.4.13 /usr/local/openc ...

  2. Kubernetes 笔记 03 扫清概念

    本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫. Hi,大家好, ...

  3. Nexus私服搭建

    maven私服的搭建 --> maven -->{ 1,本地仓库(从中央仓库下载保存到本地的或者自己到网上下载的jar文件包) 2,远程仓库 -->{ 1,中央仓库(maven官方j ...

  4. Salesforce Sales Cloud 零基础学习(二) Account 和 Contact

    上一篇我们讲了Sales Cloud 中关于一个公司的产品和定价手册的概念,产品需要卖给企业客户(包括渠道伙伴以及合作伙伴等等)或者是个人客户,那客户信息存在哪里?针对企业客户,通过谁去串联起和企业客 ...

  5. Chapter 4 Invitations——10

    "Mr. Cullen?" the teacher called, seeking the answer to a question that I hadn't heard. “C ...

  6. vue-14-less 语法的使用

    vue-15-rem-less 在计算手机端页面的时候, 使用rem和less的方式, 可以方便的设置需要的大小等 1, 在index.html中添加rem的script 代码 在head中添加 &l ...

  7. 深入MySQL复制(三):半同步复制

    1.半同步复制 半同步复制官方手册:https://dev.mysql.com/doc/refman/5.7/en/replication-semisync.html 默认情况下,MySQL的复制是异 ...

  8. 伪指令 ENTRY 与 END

    ENTRY ENTRY 是程序入口伪指令.在一个完整的汇编程序中至少有一个 ENTRY,编译程序在编译连接时依据程序入口进行连接.在只有一个入口时,编译程序会把这个入口的地址定义为系统复位后的程序起始 ...

  9. HDUOJ-2089 不要62

    Problem Description 杭州人称那些傻乎乎粘嗒嗒的人为62(音:laoer). 杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来 ...

  10. [转]rancher 初步

    本文转自:https://blog.csdn.net/weixin_41709748/article/details/81515780 什么是 rancher Rancher是一个开源的企业级全栈化容 ...