首页 > 编程语言 >Python深浅拷贝

Python深浅拷贝

时间:2023-10-20 16:11:53浏览次数:34  
标签:lt2 Python lt 深浅 print 拷贝 copy id

Python深浅拷贝

拷贝/浅拷贝/深拷贝 只针对可变数据类型

拷贝(赋值)

当lt2为lt的拷贝对象时,lt内的可变类型变化,lt2变化;lt内的不可变类型变化,lt2变化

简单的赋值
lt = [1, 2, 3]
lt2 = lt

lt.append(4)
print(lt)
# 因为列表是可变类型,所以lt的值变化,lt2的值也会跟着变化
print(lt2)

浅拷贝

当lt2为lt的浅拷贝对象时,lt内的可变类型变化,lt2变化;lt内的不可变类型和变化,lt2不变化

copy.copy()

#lt2没有变化的情况
lt = [1, 2, 3]
lt2 = copy.copy(lt)

lt.append(4)
print(lt)  # [1, 2, 3, 4]
print(lt2)  # [1, 2, 3]


lt2变化的情况
lt = [1000, 2000, 3000, [4000, 5000, 6000]]
print('id(lt)',id(lt))
print('id(lt[0])', id(lt[0]))
print('id(lt[1])', id(lt[1]))
print('id(lt[2])', id(lt[2]))
print('id(lt[3])', id(lt[3]))
print('*' * 50)
lt2 = copy.copy(lt)
print('id(lt2)',id(lt2))
print('id(lt2[0])', id(lt2[0]))
print('id(lt2[1])', id(lt2[1]))
print('id(lt2[2])', id(lt2[2]))
print('id(lt2[3])', id(lt2[3]))
print('*' * 50)

lt.append(4)
print(lt)  # [1, 2, 3, [4, 5, 6], 4]
print(lt2)  # [1, 2, 3, [4, 5, 6]]

lt[-1].append(7)
print(lt)  # [1, 2, 3, [4, 5, 6, 7]]
print(lt2)  # [1, 2, 3, [4, 5, 6, 7]]


lt[0] += 1
print(lt)
print(lt2)

深拷贝

当lt2为lt的深拷贝对象时,lt内的可变类型变化,lt2不变化;lt内的不可变类型变化,lt2不变

copy.deepcopy()


import copy
lt = [1000, 2000, 3000, [4000, 5000, 6000]]
print('id(lt)',id(lt))
print('id(lt[0])', id(lt[0]))
print('id(lt[1])', id(lt[1]))
print('id(lt[2])', id(lt[2]))
print('id(lt[3])', id(lt[3]))
print('*' * 50)
lt2 = copy.deepcopy(lt)
print('id(lt2)',id(lt2))
print('id(lt2[0])', id(lt2[0]))
print('id(lt2[1])', id(lt2[1]))
print('id(lt2[2])', id(lt2[2]))
print('id(lt2[3])', id(lt2[3]))
print('*' * 50)

lt.append(4)
print(lt)
print(lt2)

lt[-1].append(7)
print(lt)
print(lt2)

![](D:\python\03 python进阶\day009\day 09\深浅拷贝.png)

标签:lt2,Python,lt,深浅,print,拷贝,copy,id
From: https://www.cnblogs.com/JunLeewarehouse/p/17777350.html

相关文章

  • python设置代理ip,动态代理IP有哪些优势?
    在网络爬虫开发中,使用代理IP是非常常见的技巧,Python作为一门强大的编程语言,也提供了很多方法来使用代理IP,下面,我将就如何在Python中使用代理IP进行详细的阐述,并举例说明,需要的朋友可以参考下。1.方法一:使用urllib模块Python中最基础的网络请求是使用urllib模块,我们可以利用它来使......
  • 【从零学习python 】02. 开发工具介绍及交互式编程及注释详解
    编写Python代码根据我们之前介绍的知识,我们知道,所谓代码其实就是将一段普通文本按照一定的规范编写,然后交给电脑解析并且执行。那既然是一段文本,那我们是否可以直接使用文本编辑器来编码呢?答案是肯定的,但是这样开发起来,效率会很低。一、常见的代码编辑工具实际上,在我们实际工作......
  • 【从零学习python 】03. Python编程基础:变量、数据类型与标识符
    变量以及数据类型一、变量的定义对于重复使用,并且经常需要修改的数据,可以定义为变量,来提高编程效率。定义变量的语法为:变量名=变量值。(这里的=作用是赋值。)定义变量后可以使用变量名来访问变量值。如下示例:#不使用变量打印三次"今天天气真好",如果需要变成打印"......
  • 【从零学习python 】04. Python中的输出和输入
    输出简单来说,就是将程序的运行结果显示出来。一、普通的输出生活中的“输出”软件中的图形化界面输出python中变量的输出print('helloworld')二、格式化输出格式化操作的目的比如有以下代码:print("我今年10岁")print("我今年11岁")print("我今年12岁")......
  • 【从零学习python 】05. Python中运用算数运算符进行计算和字符串拼接
    进制现代的计算机和依赖计算机的设备里都用到二进制(即0和1)来保存和表示数据,一个二进制表示一个比特(Bit)。在二进制的基础上,计算机还支持八进制和十六进制这两种进制。除了计算机里的进制以外,我们生活中经常用到的是十进制。Python语言支持二进制、八进制、十六进制以......
  • 【从零学习python 】05. Python中运用算数运算符进行计算和字符串拼接
    进制现代的计算机和依赖计算机的设备里都用到二进制(即0和1)来保存和表示数据,一个二进制表示一个比特(Bit)。在二进制的基础上,计算机还支持八进制和十六进制这两种进制。除了计算机里的进制以外,我们生活中经常用到的是十进制。Python语言支持二进制、八进制、十六进制以......
  • 【从零学习python 】05. Python中运用算数运算符进行计算和字符串拼接
    进制现代的计算机和依赖计算机的设备里都用到二进制(即0和1)来保存和表示数据,一个二进制表示一个比特(Bit)。在二进制的基础上,计算机还支持八进制和十六进制这两种进制。除了计算机里的进制以外,我们生活中经常用到的是十进制。Python语言支持二进制、八进制、十六进制以......
  • python实现可视化的MD5、sha256哈希加密小工具
    python实现可视化的MD5、sha256哈希加密小工具,分享给大家,具体如下:效果图:刚启动的状态超过十条不全量显示importhashlibimporttkinterastk#窗口控制windowss=tk.Tk()windowss.title('Python_md5')#窗口title,并非第一行windowss.geometry('820x550')windowss.res......
  • 深入理解 Python 虚拟机:进程、线程和协程
    深入理解Python虚拟机:进程、线程和协程在本篇文章当中深入分析在Python当中进程、线程和协程的区别,这三个概念会让人非常迷惑。如果没有深入了解这三者的实现原理,只是看一些文字说明,也很难理解。在本篇文章当中我们将通过分析部分源代码来详细分析一下这三者根本的区别是什......
  • 使用Python指定列提取连续6位数据的单号(上篇)
    大家好,我是皮皮。一、前言前几天在Python最强王者交流群【哎呦喂 是豆子~】问了一个Python数据提取的问题,一起来看看吧。大佬们请问下 指定列提取连续6位数据的单号(该列含文字、数字、大小写字母等等),连续数字超过6位、小于6位的数据不要,这个为啥有的数据可以提取有的就提......