copy.deepcopy()的用法是将某一个变量的值赋值给另一个变量(此时两个变量地址不同),因为地址不同,所以可以防止变量间相互干扰。

大家可以猜猜下面代码第四行输出什么值

例1.

a = [1, 2, 3]

d = a # a和d的地址相同, 看第5行的输出

a[0] = 2

print(d)

print(id(a), id(b)) # id() 输出a和d变量的地址

答案是:[2 2 3]

[2, 2, 3]

2063948923080 2063948923080

原因是通过赋值的方式使得d和a的地址相同,即d和a指向内存中的同一个地址。

而且改变d中的值,a也会随着改变,自己可以尝试一下。

如果想让a和d两个变量互不影响,就用copy.deepcopy()函数

例2.

import copy

a = [1, 2, 3]

d = copy.deepcopy(a) # a和d的地址不相同

a[0] = 2

print(d)

print(id(a), id(d))

输出:

[1, 2, 3]

2793378037960 2793379617288

思考下面代码会输出什么:

例3.

a = [1, 2, 3]

d = a

c = 1 # 注意 1其实也有地址,而且这个地址是固定的,不会随程序发生改变。

a = c

print(d)

如果你有点绕不开了,先看看答案吧。

答案是:

[1, 2, 3]

也许你奇怪a和d的地址不是一样的吗,怎么改变了a,d还是不变了。原因很简单,因为c的地址和a的地址不同,把c赋值给a,则a的地址和c的地址相同,但d的地址在初始时就已经是a原先的地址了。即使a的地址后来发生了变化,d的地址也不受影响。

通过以上的介绍你可能会认为

只要两个变量的地址不同,则两者之间不会相互影响,否则就会

。真的是这样吗?

上面的例子比较简单,可以这么认为。再补充几个例子,看看程序的输出与自己想象的结果是否一样:

例4.

import numpy as np

a = np.array([[1,2,3], [5,5,5]])

d = a.transpose(1,0)

print(id(d), id(a)) # a和d的地址不同,但d会受a的影响,当然a也会受d影响

a[0, 0] = 9

print(d)

输出:

2129658874816 2129658874576

[[9 5]

[2 5]

[3 5]]

例5

import numpy as np

a = np.array([1, 2, 3])

b = np.array([1, 5, 6])

c = np.array([a, b])

print(id(a), id(c), id(c[0])) # 虽然c[0]值等于a,但c[0]和a的地址不同

a[0] = 9

print(c)

输出:

2204876507856 2204879229216 2204879229296

[[1 2 3]

[1 5 6]]

例6

import numpy as np

a = np.array([1, 2, 3])

b = np.array([1, 5, 6])

c = a - b

a[0] = 9

print(c)

输出:

[ 0 -3 -3]

例7.

import numpy as np

c = np.array([[3, 2, 3], [5, 7, 8]])

e = c[0]

e[0] = 9

print(c)

print(id(e), id(c[0]), id(c[1]), id(c)) # e和c的地址不同,但和c[0]相同

输出:

[[9 2 3]

[5 7 8]]

1965873400768 1965876121968 1965876121968 1965873400528

总结:①从例5,6可以看出,如果一个变量由多个变量通过某种方式(拼接或加减)得来的,则这个变量不会受其他变量的影响。但结合例7,如果一个变量e来自另一个变量c的某一部分值,则改变量e的值(不改变e的地址时),变量c也会受影响。②从例4可知,虽然两个变量a,d地址不同,但d是通过a经过自身变换(转置,只改变形状)而来,所以改变某一个变量内的值,另一个变量也会跟着改变。所以说并不能单纯地认为变量地址不同,变量间就不会相互影响。所以为了防止变量间相互影响,使用copy.deepcopy()方法最为安全。

python怎么实现deepcopy_python复制.deepcopy()深度解读,pythoncopydeepcopy,深入相关推荐

  1. Python 直接赋值、浅拷贝和深度拷贝全解析

    直接赋值:其实就是对象的引用(别名,其实就是一个人今天叫张三 明天叫张狗子的意思). 浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象. 深拷贝(deepcopy): copy 模块的 de ...

  2. 深度解读谷歌开源的最精确自然语言解析器SyntaxNet

    深度解读谷歌开源的最精确自然语言解析器SyntaxNet 谷歌开源了SyntaxNet,也发布了针对英语的预训练解析程序 Parsey McParseface.除了让更多人使用到最先进的分析技术之外, ...

  3. 关于私有云与存储风向的深度解读

    2019独角兽企业重金招聘Python工程师标准>>> 2018年是不平凡的一年,IT业界风云变幻.9月30日,腾讯宣布开启第三次组织架构升级,全面拥抱产业互联网,马化腾认为产业互联 ...

  4. 【NLP】Transformer模型深度解读

    " 本文对Transoformer模型进行了深度解读,包括整体架构,Attention结构的背景和细节,QKV的含义,Multi-head Attention的本质,FFN,Position ...

  5. 深度解读 MongoDB 4.4 新特性

    简介:随着计算和数据上云的趋势愈发明显,传统数据库"步履蹒跚",云数据库将是未来.本次直播,阿里云将隆重发布2款全新升级产品--云数据库 MongoDB 4.4 和MongoDB ...

  6. 深度解读 MongoDB 最全面的增强版本 4.4 新特性

    MongoDB 在今年正式发布了新的 4.4 大版本,这次的发布包含众多的增强 Feature,可以称之为是一个维护性的版本,而且是一个用户期待已久的维护性版本,MongoDB 官方也把这次发布称为「 ...

  7. python复制列表元素_Python学习教程:Python列表赋值,复制,深拷贝及5种浅拷贝详解...

    Python学习教程:Python列表赋值,复制,深拷贝及5种浅拷贝详解 概述 在列表复制这个问题,看似简单的复制却有着许多的学问,尤其是对新手来说,理所当然的事情却并不如意,比如列表的赋值.复制.浅 ...

  8. kafka 数据可靠性深度解读

    文章目录 kafka 数据可靠性深度解读 多分区.多副本 多分区的设计的特点: kafak 分区 leader 机制 kafka 数据可靠性深度解读 多分区.多副本 kafka 的消息保存在Topic ...

  9. AWR 报告深度解读:Redo Nowait指标的算法和诊断

    墨墨导读:本文将对Redo Nowait指标的算法和诊断进行深度解析. 为了系统化的梳理 AWR 的知识体系,我们整理了一个系列文章,希望从原理.使用到 AWR 报告的解读,给读者展示全面的 AWR ...

最新文章

  1. python3爬取新浪NBA新闻信息(待完善)
  2. 中国联通李福昌:探索无线连接的未来
  3. Netty学习笔记(二) 实现服务端和客户端
  4. 超经典的存储过程分页 ;-) 引自CSDN网友所作
  5. 网工路由基础(6)BGP协议
  6. 服务器设置为自动登录,Windows Server 2008 R2怎样设置自动登陆(登录)
  7. 软件设计师-不确定有限自动机到确定有限自动机转换的例子
  8. C++11 右值引用与移动语义
  9. gcc动态链接库基本知识 [转]
  10. centos6 ab性能测试web服务器
  11. 翻译: 4.4. 模型选择Model Selection、欠拟合Underfitting和过拟合Overfitting pytorch
  12. 如何使用Flutter开发web应用
  13. webssh的安装与使用
  14. 软件开发人员的能力模型
  15. 项目经理应对需求变更的策略
  16. 两轮差速移动机器人从A点移动到B点的C++语言代码
  17. Django快速入门教程
  18. 服务器和普通电脑有什么区别?
  19. word2010生成的目录右侧不对齐怎么办?
  20. 《银影侠》独立电影可能会真的成行了

热门文章

  1. 关于fiddler 模拟post请求传递参数需要注意的地方
  2. 工程造价步骤_工程造价步骤
  3. 茶余饭后:聊一聊那些神一样的程序员们 (1)
  4. Java中阻塞IO和非阻塞IO
  5. 四极管:Iphone省电的办法,把她当手机用
  6. 更新数据限制条数 mysql_mysql update limit mysql更新限制语句用法
  7. Python scripting is not supported in this copy of GDB
  8. 渗透测试之暴力破解路由器wifi(加强安全意识)
  9. 五大浏览器-四大内核
  10. docker容器启动后闪退问题