比较赋值、浅拷贝、深拷贝

1、无论是浅拷贝还是深拷贝,拷贝对象后是否会开辟新内存,取决于被拷贝对象的数据类型是否可变,一般来讲,可变的数据类型会开辟新内存,不可变数据类型反之不会开辟新内存,进行内存地址的引用(-5-256以外的大整数池会开辟内存,注:但我本地进行测试比较内存还是一样的,有问题)

2、要在单层、嵌套型对象中逐一比较拷贝

3、浅拷贝和深拷贝的区别主要体现在对嵌套型结构的拷贝上

1 import copy
 2
 3 print("================赋值==================")
 4 prototype_lst = [1, 2, 5, [78, 90]]
 5 a = prototype_lst
 6 prototype_lst.append(9)
 7 print(prototype_lst, a)
 8
 9 print("================浅拷贝==================")
10 prototype_lst.pop(-1)
11 shallow_b = prototype_lst.copy()
12 # 原始列表子对象发生变化,拷贝对象后内部子对象也跟着改变
13 prototype_lst[-1].append(100)
14 print("原始列表:", prototype_lst, "拷贝后列表:", shallow_b)
15
16 print("================深拷贝==================")
17 deep_b = copy.deepcopy(prototype_lst)
18 # 原始列表子对象发生变化,拷贝对象后内部子对象不变
19 prototype_lst[-1].append(0)
20 print("原始列表:", prototype_lst, "拷贝后列表:", deep_b)
21
22 # 不可变数据类型的浅拷贝和深拷贝
23 prototype_tuple = (1, 2)
24 shallow_c = copy.copy(prototype_tuple)
25 deep_c = copy.deepcopy(prototype_tuple)
26 print(id(shallow_c) == id(deep_c))

output:

================赋值==================
[1, 2, 5, [78, 90], 9] [1, 2, 5, [78, 90], 9]
================浅拷贝==================
原始列表: [1, 2, 5, [78, 90, 100]] 拷贝后列表: [1, 2, 5, [78, 90, 100]]
================深拷贝==================
原始列表: [1, 2, 5, [78, 90, 100, 0]] 拷贝后列表: [1, 2, 5, [78, 90, 100]]
True

总结:嵌套序列的深拷贝内部子对象之所以不会发生改变,我理解就是内部子对象也开辟了一块内存,就是开辟的够彻底也就是深

Original: https://www.cnblogs.com/shixiaogu/p/16745770.html
Author: 默玖
Title: 比较赋值、浅拷贝、深拷贝

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/809002/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 好用的WPF开源UI框架项目

    为了满足用户需求,对Newbeecoder.UI开源界面框架项目进行功能扩充,新增数据库轻量级ORM模块、数据访问模型(Model)模块、Excel操作模块、绘图功能。 ORM模块…

    Python 2023年11月5日
    044
  • Anaconda 中安装 百度飞浆Paddle 深度学习框架 教程

    1.Anaconda中新建一个环境,放Paddle 框架。 点击进入anaconda navigator, 进入后,点create新建,环境名自定义,勾选python3.7 2.进…

    Python 2023年8月26日
    064
  • Java之AQS

    AQS是什么 是用来实现锁或者其它同步器组件的公共基础部分的抽象实现,整体就是一个抽象的FIFO队列来完成资源获取线程的安排工作,并通过一个int类变量表示持有锁的状态。 ; 使用…

    Python 2023年9月17日
    054
  • HECTF2021-WP集合

    WP来自齐鲁师范学院网络安全社团 文章目录 * – misc – + 快来公众号ya + JamesHarden + 捉迷藏 + 迷途的狗狗 + snake…

    Python 2023年9月19日
    0101
  • python四个性能检测工具,包括函数的运行内存、时间等等…

    python虽然是一门’慢语言’,但是也有着比较多的性能检测工具来帮助我们优化程序的运行效率。 【阅读全文】 这里总结了五个比较好的python性能检测工具…

    Python 2023年5月24日
    088
  • 深度学习与CV教程(13) | 目标检测 (SSD,YOLO系列)

    作者:韩信子@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/37 本文地址:https://www.showmeai.tech…

    Python 2023年10月25日
    050
  • 人脸表情识别——Hog特征+基本分类算法(svm,knn,朴素贝叶斯,随机森林等)python实现

    目录 前言 一、本文采用的数据库 二、数据读取部分 1.训练部分 2.预测部分 3.训练部分数据读取 三、hog特征提取部分 1.训练部分的hog特征提取 2.预测部分单张图像的h…

    Python 2023年8月3日
    074
  • 04_pytest_allure报告的生成

    1、官网下载allure报告 :配置环境变量:在dos以及pycharm验证。allure –version 2、生成报告 第一步:在pytest.ini文件 参数一行…

    Python 2023年9月13日
    037
  • scrapy 两类item_在scrapy中嵌套Item数据的正确方法

    评论更新:看起来 nested loaders是更新的方法.另一条评论表明这种方法会在序列化过程中导致错误. 解决这个问题的最佳方法是创建一个main项和一个元项类/加载器. fr…

    Python 2023年10月3日
    045
  • flask学习记录002

    flask学习记录002 0. 流行的python web框架: 1. flask基本骨架 2. 创建Flask对象 3. WSGI 4. @app.route(‘/&…

    Python 2023年8月12日
    048
  • Python—人生重开模拟器(简版)

    专栏:python个人主页:HaiFan. 专栏简介:本专栏主要更新一些python的基础知识,也会实现一些小游戏和通讯录,学时管理系统之类的,有兴趣的朋友可以关注一下。 人生重开…

    Python 2023年11月5日
    043
  • pytest教程(二):如何调用pytest和创建测试demo

    1.安装pytest pytest要求:Python 3.6、3.7、3.8、3.9或PyPy3。(1)在命令行中执行如下命令: pip install -U pytest 执行结…

    Python 2023年9月12日
    034
  • 用pygame做经典坦克大战游戏(附源码)

    首先,我们得分析这个项目的结构,设计出它的框架 坦克大战游戏项目开发 需求分析 1.分析项目需要多少个类 2.分析每个类有哪些方法 1.坦克类(敌方坦克,我方坦克) 移动、射击、展…

    Python 2023年9月18日
    037
  • JUC包(java.util.concurrent)下的常用子类

    文章目录 前言 一、对象锁juc.locks包 二、原子类 三、四个常用工具类 * 3.1 信号量 Semaphore 3.2 CountDownLatch 总结 前言 博主个人社…

    Python 2023年10月9日
    046
  • 网络流优化

    1. 网络流优化 1.1 网络流 网络流优化问题是基本的网络优化问题,应用非常广泛,遍及通讯、运输、电力、工程规划、任务分派、设备更新以及计算机辅助设计等领域。 流从源点流出、通过…

    Python 2023年6月11日
    065
  • ai如何调整锚点大小

    默认锚点太小,快瞎了 选择编辑>首选项>选择和锚点显示,改变大小即可 posted @2022-10-01 21:14 树叶本子 阅读(46 ) 评论() 编辑 Ori…

    Python 2023年6月12日
    0160
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球