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

python 深浅拷贝

时间:2024-06-07 16:58:13浏览次数:23  
标签:python list1 list2 深浅 print 拷贝 copy id

浅拷贝

copy函数就是浅拷贝

copy函数是浅拷贝,只对可变类型的第一层对象进行拷贝

对拷贝的对象开辟新的内存空间进行存储,子对象不会开辟新的空间

list1 = [1, 2, 3]
list2 = ['a', list1]
list3 = list2.copy()

print(id(list1))
print(id(list2))       # 三个id都不一样
print(id(list3))

print(id(list2[1]))    # 这两个与第5行代码输出id一致,外层的id不一致,但是嵌套在内层的id是一致的
print(id(list3[1]))

list1.append('b')

print(list1)   # [1, 2, 3, 'b']
print(list2)   # ['a', [1, 2, 3, 'b']]
print(list3)   # ['a', [1, 2, 3, 'b']]

两种拷贝方式

a = 1
b = 2
c = [a, b]

# 普通赋值
d = c
# 浅拷贝
e = copy.copy(c)

 

 

深拷贝

deepcopy就是深拷贝

只要发现拷贝对象有可变类型就会对该对象到最后一个可变类型的每一层对象进行拷贝

对每一层拷贝的对象都会开辟新的内存空间进行存储

import copy

list1 = [1, [2, 3]]
list2 = copy.deepcopy(list1)

print(id(list1))   # 外层id不一致
print(id(list2))

print(id(list1[1]))    # 内层id也不一致
print(id(list2[1]))

list1[1].append('a')

print(list1)       # [1, [2, 3, 'a']]  只有list1会添加,list7不会添加,因为id不一致
print(list2)       # [1, [2, 3]]

 

总结

不管是给对象进行浅拷贝还是深拷贝,只要拷贝成功就会开辟新的内存空间存储拷贝的对象

 

深拷贝和浅拷贝的区别

        浅拷贝最多拷贝的对象的一层

        深拷贝可能拷贝对象的多层,并且保证数据的独立性和安全性

 

对于不可变类型的深浅拷贝

不会给拷贝的对象开辟新的内存空间,而只是拷贝了这个对象的引用

 

 

 

 

 

 

标签:python,list1,list2,深浅,print,拷贝,copy,id
From: https://blog.csdn.net/qq_64993426/article/details/139212619

相关文章

  • GitHub飙升!京东认证的“Python编程入门三剑客”究竟好在哪?
    Python凭借着简单易学、功能强大,已经跃居TIOB编程语言榜首,并且已经开始了它的霸榜之旅。如何选择一套适合自己的Python学习教程,是每个Python爱好者面临的首要问题。今天给小伙伴们带来的是图灵&京东认证的“Python编程入门三剑客”,先看《Python编程从入门到实践》,打好Python入......
  • GitHub狂揽6700 Star,Python进阶必备的案例、技巧与工程实践
    当下是Python急剧发展的时代,越来越多的人开始学习和使用Pyhon,而大家也遇到了各种问题。这份手册清晰、细致地介绍了Python代码应该遵循的编程风格,并解释了背后的原理和机制。入门Python语言相对简单,但写出优雅的代码并非易事。这份手册深入讲解了Python进阶知识的方方......
  • 开山之作!Python数据与算法分析手册,登顶GitHub!
    若把编写代码比作行军打仗,那么要想称霸沙场,不能仅靠手中的利刃,还需深谙兵法。Python是一把利刃,数据结构与算法则是兵法。只有熟读兵法,才能使利刃所向披靡。只有洞彻数据结构与算法,才能真正精通Python。今天给小伙伴们分享的这份手册,是用Python描述数据结构与算法的开山之作,......
  • Python 绘图
    折线图importmatplotlib.pyplotaspltimportmatplotlib.font_managerasfm#设置字体族:英文使用TimesNewRoman,中文使用SimSunplt.rcParams['font.family']=['TimesNewRoman','SimSun']#数据x=[1,2,3,4,5]y=[2,3,5,7,11]#......
  • Python爬虫-字体加密 ddddocr FontCreator
    目录应用场景解决思路1.下载字体文件2.分析3.代码实现版本1版本2应用场景在爬取网页数据时我们有时可能会遇到如下面的情况,价格数字在网页上能正常显示,但在控制面板查看时却是显示空白,我们通过requests等库爬取该页面后得到的数据也是无法显示出来。解决思路1.......
  • python获取多只股票价格信息的方法
    python代码如下:importefinanceasefimporttimefromdatetimeimportdatetimeimportcsvfreq=1defprocess_row(row):#在这里处理每一行数据print('股票:'+row[0],'日期:'+row[2],'现价:'+row[3],'最高:'+row[5],'最低:�......
  • 美团面试:说说Netty的零拷贝技术?
    零拷贝技术(Zero-Copy)是一个大家耳熟能详的技术名词了,它主要用于提升IO(Input&Output)的传输性能。那么问题来了,为什么零拷贝技术能提升IO性能?1.零拷贝技术和性能在传统的IO操作中,当我们需要读取并传输数据时,我们需要在用户态(用户空间)和内核态(内核空间)中进行数据拷贝,它的执......
  • 单个python文件代码的车牌检测系统 使用pyqt做界面进行车牌检测,可以保存结果到excel文
    融合了hyperlpr3和opencv来检测车牌通过图片检测车牌的系统,使用了pyqt和hyperlpr3结合来进行检测,可以保存检测的结果到excel文件 亲自测试修改代码,运行正常并且不依赖百度网络api,纯本地运行,融合了2个车牌检测模型,第一个模型使用opencv来模糊图像,然后进行边缘检测和......
  • Python自动化发送邮件如何实现?怎么配置?
    Python自动化发送邮件需要注意什么?邮件群发的技巧?无论是个人使用还是企业需求,电子邮件的发送都是必不可少的。而Python作为一门功能强大的编程语言,可以通过自动化脚本实现批量发送邮件,从而提高工作效率。AokSend将详细介绍如何使用Python自动化发送邮件。Python自动化发送邮......
  • Python实现投递多线程任务
    使用Python的apscheduler库中的BackgroundScheduler实现投递多线程任务的示例代码。这个示例将展示如何根据任务ID投递和停止任务,设置任务同时执行的上限,以及删除全部任务。首先,确保你已经安装了apscheduler库:``pipinstallapscheduler``代码示例:``fromapscheduler.sched......