首页 > 编程语言 >python深浅拷贝学习

python深浅拷贝学习

时间:2023-11-01 10:24:19浏览次数:48  
标签:python 对象 深浅 拷贝 copy id 赋值

copy的原文链接(仅供自己学习查看):

python 浅析格式化输出和深浅copy - 战争热诚 - 博客园 (cnblogs.com)

 

    首先我们从切片技术说起。它应用于所有的序列,包括:列表,字符串,元祖。但是切片不能应用于字典,对于字典只能使用D.copy() 和 D.deepcopy()方法。

  下面具体说一下深浅copy,可以应用于序列,也可以应用于字典

 1  import copy
 2 >>> a = [1,['m']]
 3 >>> b = a   # b采用赋值的方式
 4 >>> c = copy.copy(a)  # c采用浅拷贝
 5 >>> d = copy.deepcopy(a) # d采用深拷贝
 6 >>> e = copy.copy(a) # e采用浅拷贝
 7 >>> f = copy.deepcopy(a) # f采用深拷贝
 8 >>> print(a,'\n',b,'\n',c,'\n',d,'\n',e,'\n',f)
 9 [1, ['m']]
10  [1, ['m']]
11  [1, ['m']]
12  [1, ['m']]
13  [1, ['m']]
14  [1, ['m']]  # 无论是赋值,深浅拷贝,可以得到相同的值
15 >>> print(id(a),id(b),id(c),id(d),id(e),id(f))
16 2390627562824 2390627562824 2390627564168 2390627564744 2390627565000 2390627565128
17 # 只有通过赋值得到的b使用了与a同样的地址,深浅拷贝都分配了不同的内存空间,而且每拷贝一次都会得到一个新的空间
18  
19 >>> a.append(2)  # 对父级对象修改,增加一个值
20 >>> print(a,'\n',b,'\n',c,'\n',d,'\n',e,'\n',f)
21 # 从结果看出只有赋值的收到影响
22 [1, ['m'], 2]
23  [1, ['m'], 2]
24  [1, ['m']]
25  [1, ['m']]
26  [1, ['m']]
27  [1, ['m']]
28 >>> a[1].append('n') # 对内部对象进行修改
29 >>> print(a,'\n',b,'\n',c,'\n',d,'\n',e,'\n',f)
30 # 从结果看出赋值的,以及浅拷贝的收到了影响
31 [1, ['m', 'n'], 2]
32  [1, ['m', 'n'], 2]
33  [1, ['m', 'n']]
34  [1, ['m']]
35  [1, ['m', 'n']]
36  [1, ['m']]
37 >>>
 

      原式和赋值进行改动均会对其有影响(一级目录改动,多级目录嵌套改动)

      如果源对象只有一级目录的话,源对象做任何改动,不影响深浅拷贝对象

      如果源对象不止一级目录的话,源对象做任何改动,都要影响浅拷贝,但不影响深拷贝

      序列对象的切片其实是浅拷贝,即只拷贝顶级的对象(可以理解为初始的内容)

标签:python,对象,深浅,拷贝,copy,id,赋值
From: https://www.cnblogs.com/winBlack/p/17802424.html

相关文章

  • 带有最小间隔时间的队列读取实现 —— Python异步编程
     (注:照片源自免费网站,地址:https://www.freepik.com/photos/angry-panda/13)  ==================================================   ==================================================......
  • Python求Π
    fromrandomimportrandomfrommathimportsqrtfromtimeimportperf_counterimporttime#进度条print("2022310143117")foriinrange(1,101):print("\r",end="")print("进度:{}%:".format(i),"▓"*(i//......
  • 如何在linux系统中安装python3.8.1 并卸载 python3.6.2 更新python3引导到3.8.1
    安装python3.8.1步骤1:检查Python版本在终端中输入以下命令来检查当前安装的Python版本:python--version步骤2:安装编译Python所需的依赖项更新系统软件包,并安装构建Python所需的一些工具和库。在终端中运行以下命令:sudoaptupdatesudoapt-getinstall-ybuild-essen......
  • 【爬虫实战】用Python采集任意小红书笔记下的评论,爬了10000多条,含二级评论!
    目录一、爬取目标二、爬虫代码讲解2.1分析过程2.2爬虫代码三、演示视频一、爬取目标您好!我是@马哥python说,一名10年程序猿。我们继续分享Python爬虫的案例,今天爬取小红书上指定笔记("巴勒斯坦"相关笔记)下的评论数据。老规矩,先展示结果:截图1:截图2:截图3:共爬取了1w多条"......
  • python求Π
    fromrandomimportrandomfromtimeimportperf_counterpi=0N=100start=perf_counter()forkinrange(N):pi+=1/pow(16,k)*(4/(8*k+1)-2/(8*k+4)-1/(8*k+5)-1/(8*k+6))print('公式法:')print("圆周率值是{}......
  • 使用Python批量发送个性化邮件
    前言在现代工作环境中,我们经常需要向多个收件人发送个性化的邮件。通过使用Python编程语言,我们可以自动化这个过程,从Excel文件中读取收件人和相关数据,并发送定制的邮件。首先,导入所需的库:importpandasaspdimportsmtplibfromemail.mime.multipartimportMIMEMultipart......
  • Python算圆周率
    importsysimporttimedefprogress_bar():    foriinrange(1,101):        print("\r",end="")        print("Downloadprogress:{}%:".format(i),"▋"*(i//2),end="")        s......
  • Python 数学函数和 math 模块指南
    Python提供了一组内置的数学函数,包括一个广泛的数学模块,可以让您对数字执行数学任务。内置数学函数。min()和max()函数可用于在可迭代对象中查找最低或最高值:示例:查找可迭代对象中的最低或最高值:x=min(5,10,25)y=max(5,10,25)print(x)print(y)abs()函数返回......
  • python、R语言ARIMA-GARCH分析南方恒生中国企业ETF基金净值时间序列分析
    全文链接:https://tecdat.cn/?p=34123原文出处:拓端数据部落公众号分析师:YuyanWang虽然中国股票市场日益完善,但还不完全是弱有效市场,因此中国股票市场存在比较明显的通过技术分析达到的套利机会。解决方案任务/目标根据基金净值的要求,运用多种模型分析实现股票走势的预测。......
  • python__re模块&正则表达式*正则表达式练习题
    1、如下图是python中的re模块的讲解,已经正则表达式的基础知识2、python正则表达式训练题(网上找的,最后附上了地址)1.\d,\W,\s,\B,.,*,+,?分别是什么?\d:数字\W:非英文数字下划线的任意字符\s:任意空白字符\B:非单词开始或结尾的位置.表示非换行符的任意字符*表示匹配前面子表达式0次或多次......