Python中针对dict字典有两种复制:

(1)浅复制:利用 copy() 或者 dict() ;复制后对原dict的内部子对象(方括号[]内元素)进行操作时,由浅复制得到的dict受该操作影响

(2)深复制:利用 deepcopy() ;复制后对原dict的内部子对象(方括号[]内元素)进行操作时,由深复制得到的dict不会受该操作影响

from copy import deepcopy

def test():
d1 = {"a": {"keys": [1, 2, 3]}, 'b': {"keys": [4, 5, 6]}}
d2 = d1.copy() # 浅复制
d3 = dict(d1) # 浅复制
d4 = deepcopy(d1) # 深复制
print("d1=%s \nd2=%s \nd3=%s \nd4=%s" % (d1, d2, d3, d4))
d1["a"]["keys"] = [1, 2] # 修改d1的值
print("d1 modified.")
print("d1=%s \nd2=%s \nd3=%s \nd4=%s" % (d1, d2, d3, d4)) """
输出结果:
d1={'a': {'keys': [1, 2, 3]}, 'b': {'keys': [4, 5, 6]}}
d2={'a': {'keys': [1, 2, 3]}, 'b': {'keys': [4, 5, 6]}}
d3={'a': {'keys': [1, 2, 3]}, 'b': {'keys': [4, 5, 6]}}
d4={'a': {'keys': [1, 2, 3]}, 'b': {'keys': [4, 5, 6]}}
d1 modified.
d1={'a': {'keys': [1, 2]}, 'b': {'keys': [4, 5, 6]}}
d2={'a': {'keys': [1, 2]}, 'b': {'keys': [4, 5, 6]}}
d3={'a': {'keys': [1, 2]}, 'b': {'keys': [4, 5, 6]}}
d4={'a': {'keys': [1, 2, 3]}, 'b': {'keys': [4, 5, 6]}}
"""

[Python] dict字典的浅复制与深复制的更多相关文章

  1. Python赋值、浅复制和深复制

    Python赋值.浅复制和深复制 ​ 首先我们需要知道赋值和浅复制的区别: 赋值和浅复制的区别 赋值,当一个对象赋值给另一个新的变量时,赋的其实是该对象在栈中的地址,该地址指向堆中的数据.即赋值后,两 ...

  2. Python中的浅复制、深复制

    参考 https://docs.python.org/3/library/copy.html?highlight=copy%20copy#copy.copy https://en.wikipedia. ...

  3. iOS 浅复制和深复制的深层理解,含示例

    转载:https://www.zybuluo.com/MicroCai/note/50592 版权归 @MicroCai 所有 以下是正文: 浅复制就是指针拷贝:深复制就是内容拷贝. 集合的浅复制 ( ...

  4. java基础-浅复制与深复制的理解

    浅复制与深复制在很多编程语言中都有出现,那么什么是浅复制,什么是深复制呢? 要区分浅复制与深复制,首先我们要明确什么是复制,怎样才算是复制.复制的例子在生活中也随处可见,如复印一份文档,复制一段文字等 ...

  5. iOS 浅复制、深复制、完全复制的知识点梳理验证(附加归档解档)

    在之前转载的一片文章中,文中对浅复制和深复制进行了详细的解读,同时还提到了深复制(one-level-deep copy).完全复制(true copy)的概念,并指出iOS开发中的深复制是单层深赋值 ...

  6. 深度解析javascript中的浅复制和深复制

    原文:深度解析javascript中的浅复制和深复制 在谈javascript的浅复制和深复制之前,我们有必要在来讨论下js的数据类型.我们都知道有Number,Boolean,String,Null ...

  7. JAVA中浅复制与深复制 - coolmist - ITeye技术网站

    body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...

  8. Java中引用的浅复制和深复制

    Java中除了基本类型int,char,double等的赋值是按照值传递之外,其余的类型和对象都是按照引用进行传递的. 下面来看一个关于引用的例子. package referenceCopy;// ...

  9. js中的浅复制和深复制

    浅复制:浅复制是复制引用,复制后的引用都是指向同一个对象的实例,彼此之间的操作会互相影响 深复制:深复制不是简单的复制引用,而是在堆中重新分配内存,并且把源对象实例的所有属性都进行新建复制,以保证深复 ...

随机推荐

  1. platform_device和platform_driver的注册过程,及probe函数何时调用的分析 ⭐⭐⭐

    add  platform_device之后,需要注意的一个地方是这里,add是通过系统初始化里边调用platform_add_devices把所有放置在板级platform_device数组中的所有 ...

  2. SSH三大框架简介

    我们知道,传统的Java Web应用程序是采用JSP+Servlet+Javabean来实现的,这种模式实现了最基本的MVC分层,使的程序结构分为几层,有负责前台展示的 JSP.负责流程逻辑控制的Se ...

  3. CORE MVC 自定义认证

    微软的认证体系,集成了EF,和它的表结构,对于我们已有的系统,或者想高度自定义的人,该怎么办呢? 答案在: https://docs.microsoft.com/en-us/aspnet/core/s ...

  4. svn常用维护命令

    公司版本管理同时用的svn和gitlab,有互补作用 这边写一写慢慢积累自己用过的svn常用维护 查看版本范围之间的变化: [root@192-168-2-82 mnt]# svn log -r 45 ...

  5. 在Windows下使用Navicat连接Linux下的MySql

    Linux下的Mysql安装可以参考菜鸟教程:https://www.runoob.com/mysql/mysql-install.html 安装完成后你会发现用Navicat链接MySql会失败,这 ...

  6. Linux段错误及GDB Coredump调试方法

    最近在Linux环境下做C语言项目,由于是在一个原有项目基础之上进行二次开发,而且项目工程庞大复杂,出现了不少问题,其中遇到最多.花费时间最长的问题就是著名的“段错误”(Segmentation Fa ...

  7. vue的seo方案 prerender-seo-plugin

    利用vue cli 3.0安装脚手架.记住:勾选vue-router. 在vue.config.js里添加配置: 2, var path = require('path') 3, const Prer ...

  8. JQuery常用和很有用处的方法

    1.grep()方法: 用于数组元素过滤筛选 grep(array,callback,invert) array:待过滤数组; callback:处理数组中的每个元素,并过滤元素,该函数中包含两个参数 ...

  9. [sping]xml配置文件中factory-bean与factory-method(spring使用工厂方法注入bean)

    public class CarFactory { //非静态方法 public Car createCar(){ Car car = new Car(); car.setBrand("BM ...

  10. 十六 web爬虫讲解2—PhantomJS虚拟浏览器+selenium模块操作PhantomJS

    PhantomJS虚拟浏览器 phantomjs 是一个基于js的webkit内核无头浏览器 也就是没有显示界面的浏览器,利用这个软件,可以获取到网址js加载的任何信息,也就是可以获取浏览器异步加载的 ...