python中关于深拷贝和浅拷贝的详解

python中关于深拷贝和浅拷贝的详解

概述

在python的语法中,有两种变量的拷贝方式
一种是深拷贝,一种是浅拷贝

我们先说深拷贝

语法

这里需要通过导入系统的copy模块中的deepcopy才可以
import copy
新的对象 = copy.deepcopy(被拷贝对象)

解释

深拷贝是将操作对象整体复制出来一份,与其原来拷贝的对象没有联系,拷贝后重新分配一个内存地址
对拷贝和的对象进行各种操作,原对象也不收到影响

再来说浅拷贝

语法

浅拷贝的语法很多
新的对象 = 被拷贝对象
新的对象 = 被拷贝对象.copy()
新的对象 = lis被拷贝对象t0[:]
import copy
新的对象 = copy.copy(被拷贝对象)

解释

浅拷贝中,虽然对象本身的地址发生了改变,但是对象中包含的数据还是原来的地址,仅仅是传递过来一个引用
指向了原来对象中的数据,如果改变其中一个对象中的内容,其另一方也会对应更改
(这里需要注意,如果更改的数据类型是不可更改对象,则改变的是其引用,本身没有改变,只是这个位置的数据换成了另一个地址中的)

下面看一下代码的测试(小编的测试环境是python3.8版本)


import copylist0 = [['abc'], '秋叶夏风']
list1 = list0
list2 = list0.copy()
list3 = list0[:]
list4 = copy.copy(list0)
list5 = copy.deepcopy(list0)
list6 = copy.deepcopy(list0)print('0', list0, '拷贝的对象的地址:', id(list0), '第一个元素的地址:', id(list0[0]))
print('1', list1, '拷贝的对象的地址:', id(list1), '第一个元素的地址:', id(list1[0]))
print('2', list2, '拷贝的对象的地址:', id(list2), '第一个元素的地址:', id(list2[0]))
print('3', list3, '拷贝的对象的地址:', id(list3), '第一个元素的地址:', id(list3[0]))
print('4', list4, '拷贝的对象的地址:', id(list4), '第一个元素的地址:', id(list4[0]))
print('5', list5, '拷贝的对象的地址:', id(list5), '第一个元素的地址:', id(list5[0]))
print('6', list6, '拷贝的对象的地址:', id(list6), '第一个元素的地址:', id(list6[0]))print('---------------------------------改变拷贝对象的内容--------------------------------')list1[0] = 1
list2[0] = 2
list3[0] = 3
list4[0][0] = 4
list5[0][0] = 5
list6[0] = 6print('0', list0, '拷贝的对象的地址:', id(list0), '第一个元素的地址:', id(list0[0]))
print('1', list1, '拷贝的对象的地址:', id(list1), '第一个元素的地址:', id(list1[0]))
print('2', list2, '拷贝的对象的地址:', id(list2), '第一个元素的地址:', id(list2[0]))
print('3', list3, '拷贝的对象的地址:', id(list3), '第一个元素的地址:', id(list3[0]))
print('4', list4, '拷贝的对象的地址:', id(list4), '第一个元素的地址:', id(list4[0]))
print('5', list5, '拷贝的对象的地址:', id(list5), '第一个元素的地址:', id(list5[0]))
print('6', list6, '拷贝的对象的地址:', id(list6), '第一个元素的地址:', id(list6[0]))

结果如下:

D:\Python38\python.exe E:/PycharmProjects/python_August/day09/关于列表的拷贝问题.py
0 [['abc'], '秋叶夏风'] 拷贝的对象的地址: 2209540405760 第一个元素的地址: 2209541417472
1 [['abc'], '秋叶夏风'] 拷贝的对象的地址: 2209540405760 第一个元素的地址: 2209541417472
2 [['abc'], '秋叶夏风'] 拷贝的对象的地址: 2209540405888 第一个元素的地址: 2209541417472
3 [['abc'], '秋叶夏风'] 拷贝的对象的地址: 2209541418112 第一个元素的地址: 2209541417472
4 [['abc'], '秋叶夏风'] 拷贝的对象的地址: 2209541417152 第一个元素的地址: 2209541417472
5 [['abc'], '秋叶夏风'] 拷贝的对象的地址: 2209541418176 第一个元素的地址: 2209541417792
6 [['abc'], '秋叶夏风'] 拷贝的对象的地址: 2209541417856 第一个元素的地址: 2209541416896
---------------------------------改变拷贝对象的内容--------------------------------
0 [1, '秋叶夏风'] 拷贝的对象的地址: 2209540405760 第一个元素的地址: 140708592568128
1 [1, '秋叶夏风'] 拷贝的对象的地址: 2209540405760 第一个元素的地址: 140708592568128
2 [2, '秋叶夏风'] 拷贝的对象的地址: 2209540405888 第一个元素的地址: 140708592568160
3 [3, '秋叶夏风'] 拷贝的对象的地址: 2209541418112 第一个元素的地址: 140708592568192
4 [[4], '秋叶夏风'] 拷贝的对象的地址: 2209541417152 第一个元素的地址: 2209541417472
5 [[5], '秋叶夏风'] 拷贝的对象的地址: 2209541418176 第一个元素的地址: 2209541417792
6 [6, '秋叶夏风'] 拷贝的对象的地址: 2209541417856 第一个元素的地址: 140708592568288Process finished with exit code 0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/455542.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

运动估计简介

运动估计( Motion Estimation) 维基百科链接:http://en.wikipedia.org/wiki/Motion_estimation运动估计的应用有很多,最初的应用的领域是视频的编码。运动估计算法一般分为: 像素递归法pel-recursive algorithm (PRA)和块匹配法 block-matching algorith…

tutte定理证明hall定理_深入浅出|中心极限定理(Central Limit Theorem)及证明

在介绍统计学中最重要的定理之一-中心极限定理-之前&#xff0c;我们先来想一个问题&#xff1a;统计学的目的是什么&#xff1f;根据<Mathematical statistics with application 7th Edition>书中所写的&#xff1a;统计学的目的是基于从总体中的样本所获得的信息&#…

让数据中心变得更加友好

通常来说&#xff0c;数据中心是一个安全防护十分严密的地方&#xff0c;其安全功能的设计旨在阻止不速之客的访问。但专家认为数据中心可以变得更加友好&#xff0c;因为数据中心需要在人类社会中发挥更大的作用。 数据中心的整体概念是一种可以通过云计算或其他方法进行远程访…

traceroute/tracert--获取网络路由路径

traceroute 是用来检测发出数据包的主机到目标主机之间所经过的网关数量的工具。traceroute 的原理是试图以最小的TTL发出探测包来跟踪数据包到达目标主机所经过的网关&#xff0c;然后监听一个来自网关ICMP的应答。发送数据包的大小默认为 38个字节。 通过traceroute我们可以知…

使用Cygwin实现vlc 1.0.5的wince移植

本文完全参照了天将降的博客文章&#xff0c;写于此以作来日备忘之用&#xff0c;原文地址&#xff1a;http://bk6.blog.163.com/blog/static/24498560201051193449196/ 第一步&#xff1a;下载安装Cygwin。笔者建议大家不要安装不完整的版本&#xff0c;以免出现不必要的错误…

andriod studio 运行 无结果_华为物联网操作系统LiteOS内核教程01——IoT-Studio介绍及安装...

1. 物联网一站式开发工具 —— IoT StudioIoT Studio 是支持 LiteOS 嵌入式系统软件开发的工具&#xff0c;提供了代码编辑、编译、烧录 及调试等一站式开发体验&#xff0c;支持 C、C、汇编等多种开发语言&#xff0c;让您快速&#xff0c;高效地进 行物联网开发。2. IoT Stud…

5G通信技术能否终结商用WiFi?

科技创新与体育发展可谓相生相伴&#xff0c;而如今科技在体育领域的应用也越来越广泛。本周的话题关于5G技术与球场&#xff0c;作者为英国体育娱乐营销咨询公司Stadia Solutions的联席首席执行官戈登坎贝尔。在坎贝尔先生看来&#xff0c;球场Wi-Fi赋予了俱乐部对数据的掌控力…

颜色转换

以蓝色为例&#xff0c;#0000FF应该被表示成rgb(0,0,255)。 我们将函数命名为getRGB() &#xff08;可以将字符串视为数组&#xff0c;这个数组的元素为字符&#xff09; function getRGB(color) {var rgb [parseInt(0xcolor.slice(1,3)),parseInt(0xcolor.slice(3,5)),parseI…

wince ./configure

CPPFLAGS"-I/usr/wince/include -D_WIN32_WCE0x0500" LDFLAGS"-L/usr/wince/lib" ./configure--hostarm-mingw32ce 指定软件运行的系统平台&#xff1b;host就是你编译好的程序可以运行的平台--target-osmingw32ce 指定软件面向(target to)的系统平台.这主…

android 按键会触发ontouch吗?_Android实现炫酷的拖拽浮动按钮

IOS的Assistive Touch效果很炫酷&#xff0c;可以任意拖拽&#xff0c;同时点击后会展开菜单栏。然而&#xff0c;这不只是IOS的特权&#xff0c;Android也可以实现。但是由于悬浮窗需要申请权限&#xff0c;所以本文仅在app内实现&#xff0c;可以任意拖拽&#xff0c;并可以响…

强名称程序集(strong name assembly)——为程序集赋予强名称

引言&#xff1a;在曾经的项目开发中&#xff0c;在程序集中见到过一个后缀为*.snk的文件。当时看这个文件的图标。感觉可能是企业内部保护版权啥的一种方式。一&#xff0c;强程序集攻克了哪些问题&#xff1f;1&#xff0c;唯一标识一个程序集2&#xff0c;放置程序集被仿冒和…

如何成为一名合格的数据分析师

“21世纪什么最贵&#xff0c;人才”&#xff0c;在目前大数据时代下&#xff0c;什么最难找&#xff0c;什么最贵&#xff0c;实现数据价值的人&#xff0c;数据分析师。 但是对于数据分析师的认识&#xff0c;比较极端&#xff0c;但对数据分析师价值的认识正在回归理性。很多…

【ffmpeg for wince】音视频编解码多平台移植(for window/wince))ffmpeg

from: http://www.cnblogs.com/windwithlife/archive/2009/05/31/1492728.html 终于完成了了第二个Client side原型&#xff08;for Wince)&#xff0c;其中花掉我最多时间的就是ffmpeg的对WINCE的移植。其中有大半时间是由于网上的一些不完整及不正确信息所误导&#xff0c;但…

Java 重写(Override)与重载(Overload)

重写(Override) 重写是子类对父类的允许访问的方法的实现过程进行重新编写&#xff01;返回值和形参都不能改变。即外壳不变&#xff0c;核心重写&#xff01; 重写的好处在于子类可以根据需要&#xff0c;定义特定于自己的行为。也就是说子类能够根据需要实现父类的方法。在面…

银联pos小票word模板_商家pos机刷卡必须知道的知识

相信很多卡友伙伴或者商铺店家都装有pos机&#xff0c;然后一般pos机都没有使用说明书&#xff0c;更没有结合刷卡方法在内的秘籍。今天我就分享下刷卡必须知道的一些知识。刚刚办理pos机的当天一定要注意&#xff1a;使用之前呢&#xff0c;务必核对一下基本信息&#xff0c;例…

《Ext JS权威指南》——2.4节关于Ext.onReady

2.4 关于Ext.onReady 代码为什么写在Ext.onReady中&#xff0c;而不是在body中添加一个onload事件并在onload事件中运行呢&#xff1f;主要原因是Ext.onReady在DOM模型加载完毕后即可进行操作&#xff0c;而无需像onload事件那样&#xff0c;等待页面的所有资源都加载完毕后才…

git push 提交时显示 Empty reply from server的解决办法

输入 git fetch origin --prune 参考链接&#xff1a;https://stackoverflow.com/questions/28364023/gits-error-on-push-empty-reply-from-server 转载于:https://www.cnblogs.com/team42/p/6941678.html

转]移动视频监控(1)---项目综述

对于市场上的视频监控系统&#xff0c;大家都有一定的了解&#xff0c;就是视频采集&#xff0c;经过无线/有线发送到服务或代理&#xff0c;客户从服务或代理上得到视频/音频流。不复杂。 对于不远的将来&#xff0c;3G&#xff0c;4G的到来&#xff0c;对移动的业务有一个推动…

java 空接口_学Java,java接口搞明白了吗?大牛让你一文搞清楚

前言对于面向对象编程来说&#xff0c;抽象是一个极具魅力的特征。如果一个程序员的抽象思维很差&#xff0c;那他在编程中就会遇到很多困难&#xff0c;无法把业务变成具体的代码。在 Java 中&#xff0c;可以通过两种形式来达到抽象的目的&#xff0c;一种是抽象类&#xff0…

Check Point CEO:“我们正在积极寻找收购目标”

Check Point Sofrware Technologies很可能成为下一个会产生收购案的主流安全厂商&#xff0c;首席执行官Gil Shwed在该公司第二季度财报电话会议上这样表示。 “我们正在积极地寻求收购目标&#xff0c;期待无论是大规模的还是小规模的扩张&#xff0c;”Shwed表示。“我们在并…