简单来说,copy 复制创建新的容器,而引用容器内元素的地址不变。而 deepcopy 也对容器内的容器元素进行复制。

但是这种复制具体是什么体现呢?是否只是对第一层容器元素进行了复制?写了一段代码验证。

from collections.abc import Iterable
from pprint import pprint
from copy import deepcopy def get_id(obj):
if isinstance(obj, Iterable):
return tuple((id(i), get_id(i)) for i in obj)
else:
return None ls = [1, 1, [2, 22], [3, [3, 33]]]
ids = lambda obj: pprint((id(obj), get_id(obj))) ids(ls)
ids(ls.copy())
ids(deepcopy(ls))
(139690047990528,
((139690060546288, None),
(139690060546288, None),
(139690050031936, ((139690060546320, None), (139690060546960, None))),
(139690048039680,
((139690060546352, None),
(139690048043392, ((139690060546352, None), (139690060547312, None))))))) (139690048041088,
((139690060546288, None),
(139690060546288, None),
(139690050031936, ((139690060546320, None), (139690060546960, None))),
(139690048039680,
((139690060546352, None),
(139690048043392, ((139690060546352, None), (139690060547312, None))))))) (139690048041088,
((139690060546288, None),
(139690060546288, None),
(139690048039808, ((139690060546320, None), (139690060546960, None))),
(139690047983488,
((139690060546352, None),
(139690050043008, ((139690060546352, None), (139690060547312, None)))))))

结论:

  • 数字类型元素的引用地址始终不变,同一个数字可被多次引用。
  • copy 只改变了最外层列表的地址,内部元素均相同。
  • deepcopy 改变了最外层以及内部所有列表(包括列表元素的列表元素)的地址。
  • ls.copy()deepcopy(ls) 的地址相同,猜测原因是程序中 ls.copy 返回的数据在打印结束后没有被使用了,便被销毁,同一个地址又用来存储 deepcopy(ls) 返回的结果。

Python copy & deeocopy 探究的更多相关文章

  1. python copy模块

    python copy模块 copy模块用于对象的拷贝操作 该模块只提供了两个主要的方法: copy.copy:浅复制 copy.deepcopy:深复制 直接赋值,深拷贝和浅拷贝的区别 直接赋值:简 ...

  2. Python copy and deepcopy

    Python中的对象之间赋值时是按引用传递的,如果需要拷贝对象,需要使用标准库中的copy模块. 1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象. 2. copy.deep ...

  3. Python copy对象(copy与deepcopy)

    Python中的对象之间赋值时是按引用传递的,如果需要拷贝对象,需要使用标准库中的copy模块. 1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象. 2. copy.deep ...

  4. Python装饰器探究——装饰器参数

    Table of Contents 1. 探究装饰器参数 1.1. 编写传参的装饰器 1.2. 理解传参的装饰器 1.3. 传参和不传参的兼容 2. 参考资料 探究装饰器参数 编写传参的装饰器 通常我 ...

  5. python copy和deepcopy

    Python FAQ2:赋值.浅拷贝.深拷贝的区别? 发表于 2014-08-15   |   分类于 Lang.-Python  |   在写Python过程中,经常会遇到对象的拷贝,如果不理解浅拷 ...

  6. python copy与deepcopy (拷贝与深拷贝)

    copy与deepcopy python 中的copy与deepcopy是内存数据的操作,但是两个函数有一定的区别. 1.copy import copy list = [1, [4, 5, 6], ...

  7. Python ---------copy

    copy---探索 1.浅copy    就相当于把变量指针指向对象 相当于给对象从新起了个小名 a=[[1,2],3,4] a=[[1,2],3,4] b=a.copy() # print(a) # ...

  8. python strip() 函数探究

    strip()方法语法:str.strip([chars]); 声明:str为字符串,rm为要删除的字符序列 str.strip(rm) 删除字符串中开头.结尾处,位于rm删除序列的字符 eg1: # ...

  9. Python copy(), deepcopy()

    copy() 浅拷贝: 创建一组拷贝对象的引用.切片操作相当于浅拷贝,会生成一个新的对象,新的对象里保存原对象的引用. 如果原对象中的可变对象改变(list),那么浅拷贝的对象随之改变,如果原对象中不 ...

  10. Python——flask漏洞探究

    python的用途是真的多,就连网站也能做,这个有点像Java的Servlet flask基础 hello world 我们先从基础的开始,在网页上打出hello world,python代码如下: ...

随机推荐

  1. day33:进程锁&事件&进程队列&进程间共享数据

    目录 1.锁:Lock 2.信号量:Semaphone 3.事件:Event 4.进程队列:Queue 5.生产者和消费者模型 6.JoinableQueue 7.Manager:进程之间共享数据 锁 ...

  2. 太坑了吧!一次某某云上的redis读超时排查经历

    一次排查某某云上的redis读超时经历 性能排查,服务监控方面的知识往往涉及量广且比较零散,如何较为系统化的分析和解决问题,建立其对性能排查,性能优化的思路,我将在这个系列里给出我的答案. 问题背景 ...

  3. 【MyBatis】分页插件

    分页插件 分页插件配置 a 添加依赖 <dependency> <groupId>com.github.pagehelper</groupId> <artif ...

  4. mysql 命令批量修改一个字段/帝国cms sql命令修改一个字段

    UPDATE phome_enewstagsdata SET classid=5 where classid=1 UPDATE phome_ecms_news SET classid=8 where ...

  5. Arch Linux安装笔记

    ​ 最近有些厌倦Windows,所以想尝试一下Linux,选择Arch的原因不再赘述,建议以ArchLinux官方安装指南为主,这篇笔记只是方便我自己安装而写的,仅供参考. 1. 安装前的准备 1.1 ...

  6. win10 双开微信 微信双开

    方法1:鼠标连续点击实现Windows微信双开在桌面上找到微信图标,鼠标左键连续点击2次为打开一个微信,连续点击8次就打开了4个微信. 注意:不要连续点开太多防止卡顿. 方法2:回车键双击微信图标实现 ...

  7. logstash增量同步mysql数据到es

    本篇本章地址:https://www.cnblogs.com/Thehorse/p/11601013.html 今天我们来讲一下logstash同步mysql数据到es 我认为呢,logstash是众 ...

  8. Vue中实现数据列表无缝轮播

    类似这种滚动轮播效果 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta char ...

  9. MySQL之主从复制搭建

    文章目录 主从复制 主从搭建 配置主从复制的命令 测试 总结 主从复制 主从也叫做(AB复制),允许一个服务器从一个服务器数据库(主服务器)的数据复制到一个或者多个MySQL数据库服务器. 主从复制的 ...

  10. 【Docker】容器管理

    一.容器生命周期及启动过程 1.容器生命周期 2.容器启动过程 二.容器管理命令 Usage: docker [OPTIONS] COMMAND A self-sufficient runtime f ...