首页 > 编程语言 >Python_别名-深拷贝和浅拷贝

Python_别名-深拷贝和浅拷贝

时间:2024-11-28 11:13:00浏览次数:7  
标签:__ 函数 Python 别名 对象 拷贝 上下文 变量

变量和类型

从CPU执行的角度--汇编语言
    编程具体到物理层--指令区 & 变量区
	  CPU 可以根据某些寄存器上存的数据找到内存上的区域,并进行读写操作
      CPU 访问内存时需要的是地址,而不是变量名和函数名!
	    变量名和函数名只是地址的一种助记符,当源文件被编译和链接成可执行程序后,它们都会被替换成地址。
	    编译和链接过程的一项重要任务就是找到这些名称所对应的地址。
		
	按照数学方式来描述计算过程,可以没有变量-计算机硬件不能像数学家描述的理想情况一样理想化
       高级语言也要迁就于机器语言,一块内存要反复用-充分利用硬件资源	
	   随着科技发展-比如量子计算机应用等可能描述方式就会发生时代性的改变
		
	变量类型 --类型系统
        是什么数据,它占用多长的空间, 可以进行什么样的操作 变量的类型定义了这个变量所能够支持的操作的集合
		 类型约束-类型多态--类型组合 
		1、根据类型安排合适的操作 2、借助类型系统发现部分逻辑错误

    关键在于编译出正确的二进制文件--怎么编译出正确的二进制文件呢-字节序列	(施加约束)对数据进行信息抽象的定义-量纲分析
        定长数据-变长数据
             定长数据  不同的种类--类型。
             变长数据  动态分配问题
        静态区,一个变量一旦存上去了,它的前方后方都紧靠着别的数据,大家的位置都是固定的,长度也是固定的,程序也依赖于这些数据的固定性来找到和处理它们		  

    类型是值的抽象域

数据结构

 数据类型: 单个数据元素的属性和处理(如数据的大小、范围)
 数据结构: 数据元素的整体组织和操作(如元素之间的关系)

 数据结构是一种存储和组织数据的方式,旨在提高数据访问和修改的效率。
     它主要关注数据元素之间的关系和布局,以及如何高效地处理这些数据
 数据格式 
    数据如何被存储、读取和交换

上下文 (context)

执行顺序---顺序执行-选择执行-条件分支-循环执行- 本质就是 PC 值的变化,PC 值永远存储的是即将运行的下一条指令的地址
   -函数也是一种执行顺序--跳转,和单纯的跳转不同
       函数调用需要在完成函数内部的处理之后,
	     处理流程再返回到函数调用点,也就是返回到函数调用指令的下一条指令,因此针对于函数调用来讲,涉及到函数返回地址的处理
 函数返回地址进行压栈-堆栈的机制,堆栈的特性是先入后出		 
函数的调用机制

上下文切换(context switch)定 上下文切换指的是内核(操作系统的核心)在CPU上对进程或者线程进行切换
    包括处理器的寄存器状态、程序计数器、堆栈指针、内存管理信息以及其他任务特定的数据
	 Thread Context
函数上下文 --作用域 闭包 Closure
    函数所在的 scope-当前正在运行的函数所在的范围。它是一个包含了函数参数和本地变量的环境,函数在执行时会使用这个环境中的变量
   变量环境-词法环境等	
 作用域上下文定义了变量的可见性和生命周期
 安全上下文(Security Context) 上下文可能包含用户认证信息、权限和角色等。
 网络请求上下 上下文可能包含请求和响应的详细信息,如HTTP头部、请求体、状态码等	
Environment

python上下文

 上下文管理器是资源管理的绝佳
   类的 with 语句,我们必须实现 __enter__ 和 __exit__ 方法。 
       当执行进入 with 语句的上下文时,Python调用 __enter__。 在这里,应该获取资源并将其返回。 
	   当执行再次离开上下文时,将调用 __exit__ 并释放资源。
	      如果执行发生异常,Python将类型,值和回溯传递给 __exit__ 方法。 它可以在这里处理异常


 Contextlib库是其中之一,它提供了一些用于支持上下文管理协议(即with语句)的函数。
   contextmanager 装饰器	
   closing 函数 是一个帮助函数,用来确保对象的close方法在完成后被正确的调用。
    contextlib.contextmanager 装饰器对其进行装饰。 
	  然后,我们也可以使用 with 语句调用该函数。 
	  对于这种方法,函数必须在 try 语句中 yield 资源,
	  并且释放资源的 __exit__ 方法的所有内容现在都在相应的 finally 语句内	   

深拷贝和浅拷贝

  别名是指给对象赋予一个新的名称,操作别名实际上是在操作同一个对象;
    而深层复制和浅复制是创建新的对象。浅复制只复制了原始对象的引用。
  
浅拷贝和深拷贝更多地涉及到涉及到指针成员的对象的拷贝行为,而对于普通变量,只需要关注其值的复制即可。
别名(Alias):在Python中,可以通过给对象赋予一个新的名称来创建别名 
   
 浅拷贝 Shallow Copy
  浅拷贝是创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝。
     如果属性是基本类型,拷贝的就是基本类型的值,
	 如果属性是引用类型,拷贝的就是内存地址 ,
	所以如果其中一个对象改变了这个地址,就会影响到另一个对象。
       新旧对象还是共享同一块内存
 深拷贝 Deep Copy
   深拷贝是将一个对象从内存中完整的拷贝一份出来,
    从堆内存中开辟一个新的区域存放新对象,且修改新对象不会影响原对象
  深拷贝会另外创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象

调试和测试

调试
  非侵入式调试
    侵入式调试: 

命令行的方式 -非侵入式调试
     python -m pdb main.py
	 
	    b/break 命令来设置断点
	    cl/clear 命令来清除断点
		 p 命令来查看变量的值
		 
Python的调试器 pdb.set_trace()
     import pdb
     
     
    ###调试的方式 
      设置断点、调试控制
         开始/暂停、步过 (Step Over)、步入 (Step Into)、步出 (Step Out)、重新开始和停止调试会话。
	
图形化界面的方式
   1.设置断点   代码中设置断点,只需单击左侧行号边上的空格。标有红点的行是断点,程序运行到这里会暂停,允许你检查变量状态、步进代码
   2.Start Debugging	
       最上方出现的调试工具栏让你可以执行常规的调试操作,如开始/暂停、步过 (Step Over)、步入 (Step Into)、步出 (Step Out)、	   
  
追踪 
   import traceback

单元测试
   mock已经被集成到了unittest单元测试框架中,所以可以直接使用。在代码中直接import进来就可以使用mock了。
    from unittest import mock
    使用一个替身对象来模拟它,然后使用断言来确认结果
    
    异常处理和错误处理

 vscode   
         terminal  
	     debug console  
	     problems 
	     output
     outline
	 timeline

可观测性

 监控方案
   可观测性主要从日志(Log)、指标(Metric)和追踪(Trace)	
       指标‌是对系统和应用程序性能进行量化的数值数据
	   ‌追踪‌记录和分析服务间调用的过程,帮助理解请求在系统中的传递路径和延迟,
	    对于分布式系统中性能问题的诊断和解决尤为重要
    Log是离散的事件,Trace可以认为是带请求追踪的事件,Metric是带统计量的事件

参考

 Python 进阶 https://python-advanced.qiwihui.com/zh-cn/latest/index.html	
 https://www.python-engineer.com/courses/advancedpython/01-lists/
 https://python3-cookbook.readthedocs.io/zh-cn/latest

标签:__,函数,Python,别名,对象,拷贝,上下文,变量
From: https://www.cnblogs.com/ytwang/p/18573892

相关文章

  • CudaSPONGE之Python接口
    技术背景在上一篇博客中我们介绍了CudaSPONGE的基本安装和使用方法。为了性能考虑,CudaSPONGE是基于纯CUDAC开发的,但是现在很多轮子都是Python开发的。为兼容更多的框架和平台,CudaSPONGE也提供了相应的PythonAPI,方便Python开发者调用与二次开发。接口逻辑虽然安装和操作的过程......
  • vue2-解决node-sass安装失败问题,提示python缺失
    当前NodeJs版本v18.16.0Node-Sass与NodeJs版本关系对照图安装Node-Sass报错提示截图原因分析node-sass的代码主要是C++实现,运行node-sass需要进行编译后再运行,而python可以为node-sass提供运行时编译环境,所以正常情况下下载node-sass源代码同时会检查python的安装,确保正常......
  • Python 使用shapely、geopandas、matplotlib绘制全国各个省份2023年GDP热力图,鼠标点击
    以下是一个示例代码,用于在使用matplotlib和geopandas绘制地图并设置区域后,当鼠标点击地图上的某个区域时,返回该区域的名称。首先,确保你已经安装了matplotlib、geopandas和descartes库(descartes库用于在matplotlib中绘制地理空间数据)。如果没有安装,可以通过pipinstallmatplot......
  • Python解析Properties文件
    支持#注释及\换行支持多级属性赋值,如a.b.c=1demo.propertiesappId=cactus#公钥publicKey=-----BEGINPUBLICKEY-----\n\MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEP9eQZFl3j5zZX8bmYYEznA0z3/X+\n\TooIQ11rxFcPZsTvJPLCUY7NHasUenXJngmvRXSnP4odegaoe4usLDv/3A==\n\-----......
  • python之Excel操作库XlsxWriter
    github: https://github.com/jmcnamara/XlsxWriter PythonXlsxWriter是一个用于创建Excel2007+XLSX文件的库,它提供了简单易用的接口,使得开发者可以轻松地生成Excel文件,并且支持多种高级功能,如格式设置、图表绘制、数据透视表等。XlsxWriter与Excel文件的兼容性非常......
  • 从零开始的Python世界生活——基础篇(Python字典)
    从零开始的Python世界生活——基础篇(Python字典)1.Python字典是什么?​Python字典是python中非常重要的非常灵活和强大的内置数据结构,用于存储键值对(key-value),Python中的字典等价于数学中的映射,也就是key(键)与value(值)一一对应。我们可以通过查找key(键)来获得key(键......
  • 从零开始的Python世界生活——基础篇(Python字典)
    从零开始的Python世界生活——基础篇(Python字典)1.Python字典是什么?​ Python字典是python中非常重要的非常灵活和强大的内置数据结构,用于存储键值对(key-value),Python中的字典等价于数学中的映射,也就是key(键)与value(值)一一对应。我们可以通过查找key(键)来获得key(键)所对......
  • Java设计模式 —— 【创建型模式】原型模式(浅拷贝、深拷贝)详解
    文章目录前言原型模式一、浅拷贝1、案例2、引用数据类型二、深拷贝1、重写clone()方法2、序列化总结前言先看一下传统的对象克隆方式:原型类:publicclassStudent{privateStringname;publicStudent(Stringname){this.name=name;......
  • python中常见的数据结构
    Python中有几种常见的数据结构,它们各自有不同的特点和用途。我来简单介绍一下:1.列表(List):  •列表是有序的集合,可以随时添加和删除其中的元素。  •列表中的元素可以是不同类型的。  •列表是可变的,即可以修改。  •列表使用方括号[]表示,元素之间用......
  • Day1 [Python学习] print与变量
    1.print1.1含义print()是一个内置函数,主要用于将指定的内容输出到控制台。这些内容可以是各种数据类型,如字符串、数字、列表、字典等。1.2格式print加(),()里边写要输出的内容,需要用双引号"或者单引号' 注意:字母、标点、符号全是英文状态下的!!print('helloworld......