Python dict字典copy()方法详解

copy() 方法用于返回一个具有相同键值对的新字典,例如:
a = {'one': 1, 'two': 2, 'three': [1,2,3]}
b = a.copy()
print(b)
运行结果为:

{'one': 1, 'two': 2, 'three': [1, 2, 3]}

可以看到,通过 copy() 方法,就可以将字典 a 的数据拷贝给字典 b。

注意,copy() 方法所遵循的拷贝原理,既有深拷贝,也有浅拷贝。拿拷贝字典 a 为例,copy() 方法只会对最表层的键值对进行深拷贝,也就是说,它会再申请一块内存用来存放 {'one': 1, 'two': 2, 'three': []};而对于某些列表类型的值来说,此方法对其做的是浅拷贝,也就是说,b 中的 [1,2,3] 的值不是自己独有,而是和 a 共有。

例如:
a = {'one': 1, 'two': 2, 'three': [1,2,3]}
b = a.copy()
#向 a 中添加新键值对,由于b已经提前将 a 所有键值对都深拷贝过来,因此 a 添加新键值对,不会影响 b。
a['four']=100
print(a)
print(b)
#由于 b 和 a 共享[1,2,3](浅拷贝),因此移除 a 中列表中的元素,也会影响 b。
a['three'].remove(1)
print(a)
print(b)
运行结果为:

{'one': 1, 'two': 2, 'three': [1, 2, 3], 'four': 100}
{'one': 1, 'two': 2, 'three': [1, 2, 3]}
{'one': 1, 'two': 2, 'three': [2, 3], 'four': 100}
{'one': 1, 'two': 2, 'three': [2, 3]}

从运行结果不难看出,对 a 增加新键值对,b 不变;而修改 a 某键值对中列表内的元素,b也会相应改变。

推荐文章
it运维是做什么的?

互联网IT运维工作,以服务为中心,以稳定、安全、高效为三个基本点,确保公司的互联网业务能够7×24小时为用户提供高质量的服务。运维人员对公司互联网业务所依赖的基础设施、基础服务、线上业务进行稳定性加强

jQuery on()方法绑定事件

在之前的学习中,我们接触了各种事件操作。实际上,在jQuery中,我们除了采用“基本事件”的方式来为元素添加事件之外,还可以采用“绑定事件”的方式。 在jQuery中,我们可以使用on()方法为元素

MongoDB创建集合

MongoDB将文档存储在集合中。集合类似于关系数据库中的表。如果集合不存在,则MongoDB会在第一次存储该集合数据时创建该集合。 MongoDB集合的命名规则 MongoDB的集合就相当于MyS

typedef的用法,C语言typedef详解

C语言允许用户使用typedef关键字来定义自己习惯的数据类型名称,来替代系统默认的基本类型名称、数组类型名称、指针类型名称与用户自定义的结构型名称、共用型名称、枚举型名称等。一旦用户在程序中定义了自

matlab有什么用?

Matlab是一个具有强大计算能力和仿真能力的数学软件,可以用于数据分析、无线通信、深度学习、图像处理与计算机视觉、信号处理、量化金融与风险管理、机器人,控制系统等领域。matlab的典型用途包括:数

desktop.ini是什么文件?

desktop.ini在正常情况下是系统可识别的一个配置文件,作用是存储用户对文件夹的个性设置;比如用户更改了文件夹图标、背景颜色等等,其配置信息都会存入到desktop.ini文件中。用户可以使用记

Spring batchUpdate方法:执行批量更新语句

该方法用于执行数据库的批量更新语句。 语法: batchUpdate(String[]sql) 参数说明: sql:多条SQL语句组成的字符串数组。 示例 本示例定义批量处理的SQL语句数

C语言格式化输入

当从一个格式化数据源中读取数据时,C语言提供了scanf()函数系列。与printf()函数一样,scanf()函数需要一个格式化字符串作为其参数,以控制I/O格式与程序内部数据之间的转换。本文介绍在

setDateHeader(Stringname,longdate) name:header的名称。 date:要设置的long类型的数值。 示例

jQuery before()和insertBefore()方法

本节教程介绍 before()方法和insertBefore()方法在元素外部的“前面”插入内容。 Pythonbefore()方法 在jQuery中,我们可以使用before()方法向所选元素外部

ACL权限是什么,Linux ACL访问控制权限(包含开启方式)

Linux系统传统的权限控制方式,无非是利用3种身份(文件所有者,所属群组,其他用户),并分别搭配3种权限(读r,写w,访问x)。比如,我们可以通过ls-l命令查看当前目录中所有文件的详细信息,其中就

Hibernate映射文件*.hbm.xml的元素及属性详解

映射文件用于向Hibernate提供对象持久化到关系型数据库中的相关信息,每个映射文件的结构基本相同,其示例代码如下所示: 在上述代码中,

C++11完美转发及实现方法详解

C++11标准为C++引入右值引用语法的同时,还解决了一个C++98/03标准长期存在的短板,即使用简单的方式即可在函数模板中实现参数的完美转发。那么,什么是完美转发?它为什么是C++98/03标准存

iPhone移动端部署TensorFlow mobile

在这个案例中将学习如何在移动环境中安装TensorFlow。此处的环境系统采用macOS,主要是为iOS和iPhone开发的。 使用Xcode开发环境和预安装TensorFlow的CocoaPods

值栈(ValueStack)是什么?

值栈(ValueStack)就是OGNL表达式存取数据的地方。在一个值栈中,封装了一次请求所需要的所有数据。 在使用Struts2的项目中,Struts2会为每个请求创建一个新的值栈,也就是说,值栈

Spring Cloud Zuul过滤器介绍及使用(传递数据、拦截请求和异常处理)

在教程《Zuul网关的介绍及使用》中一开始就介绍过,Zuul可以实现很多高级的功能,比如限流、认证等。想要实现这些功能,必须要基于Zuul给我们提供的核心组件“过滤器”。下面我们一起来了解一下Zuul

Java匿名对象

经过前面的学习,我们知道创建对象的标准格式如下: 类名称对象名=new类名称(); 每次new都相当于开辟了一个新的对象,并开辟了一个新的物理内存空间。如果一个对象只需要使用唯一的一次,就可以使用匿

Bash Shell的安装和升级(源码安装)

一般而言,BashShell是很多Linux发行版的默认Shell,所以会随着系统的安装而自动安装。不过确实有一部分读者想要安装较新版本的BashShell,所以本节会具体讲一下其安装方法,希望可以作

Java项目实战之BBS论坛系统开发(带源码和解析)

随着网络多媒体越来越发达,论坛离普通人的生活越来越远,但是作为一名开发者,论坛是我们日常查资料必须要踏足的领域。论坛的主要目的,是方便一群有同样属性的用户交流、学习和探讨,本章将手把手教大家制作一个论

关键词挖掘工具有哪些?

通过《如何挖掘SEO关键词》一文的讲解,相信大家都知道如何挖掘关键词了,所建立的关键词词库也足以应对企业网站流量及业务的拓展,但是如果想继续扩大网站的关键词词库,拓展和挖掘海量关键词,手动通过产品业务