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

Python浅拷贝和深拷贝

时间:2023-01-09 19:11:16浏览次数:60  
标签:标志 Python 对象 地址 可变 拷贝 id

预备知识

对象的三个属性
python中每一个对象都有三个属性:唯一标志,类型和值。
其中对象的标志是一串数字,是每个对象的唯一标识,位于同一地址的对象标志相同。对象的值相等和标志相等判断方法如下:

  • id(s)查看对象的标志
  • is is not判断两个对象的标志是否相同。
  • ==判断对象的值是否相同。

可变对象和不可变对象
“可变”,指改变对象的值后对象的标志(地址)是否会发生改变。如果改变列表、字典、集合(可变对象)的内容,会在相应地址上关联数值,其标志不会改变。如果改变不可变对象的值,该对象的标志一定发生改变。

不可变对象:int、float、str、bool、tuple。
可变对象:list、dict、set。

浅拷贝

浅拷贝函数:a = copy.copy(x)。是对对象外层(父级)的拷贝,不拷贝内部(子级)。可以分为:

  • x最外层不可变,则浅拷贝时:a会直接引用x的地址空间,id(a) == id(x)。
  • x最外层可变,则浅拷贝时:会给a开辟一个新的地址空间,存放x内部的值,id(a) != id(x),但是x内层的标志拷贝到a中。

深拷贝

深拷贝函数:a = copy.deepcopy(x)。是对内层和外层的全部拷贝,与浅拷贝不同的是:

  • x外层数据类型不可变,里面是可变数据类型,会新开辟地址空间存放,id(a) != id(x)。
  • x外层数据类型不可变,里面是不可变数据类型,则如同浅拷贝,id(a) == id(x)。

总结

深和浅的区别在于是否会给拷贝返回对象开辟一片新地址。对于可变对象,不论何种拷贝都会开辟一片新的地址;而不可变对象,若内层可变,深拷贝会开辟新的地址存放拷贝内容,否则都是引用原来对象的地址。

python之深拷贝和浅拷贝
python中的深拷贝和浅拷贝

标签:标志,Python,对象,地址,可变,拷贝,id
From: https://www.cnblogs.com/tree123/p/17038291.html

相关文章

  • 用python处理html代码的转义与还原-转
    本篇博客来源:用python处理html代码的转义与还原&#x27;&amp;&lt;&gt;&quot;&#x27;等特殊字符摘要:html转义:importhtml#字符串转义str="<tag>aaa</tag>"str_out=......
  • Python经典开源项目
    Python-100-Days项目地址:https://github.com/jackfrued/Python-100-DaysPython-100-Days就是我上面说的“保姆级”教程,他的内容面面俱到包括了Python开发的方方面面,......
  • Socket爬虫:Python版
    简述:较为底层的爬虫实现,用于了解爬虫底层实现的具体流程,现在各种好用的爬虫库(如requests,httpx...等)都是基于此进行封装的。PS:本文只作为实现请求的代码记录,基础部分不做过......
  • python实用工具
    日志记录工具代码(log_util.py)importosimportloggingimportlogging.configUSER_PATH=''#日志文件夹BASIC_PATH=os.path.join(os.path.dirname(os.path.......
  • python 数学题 百元百鸡 百马百担 实现代码
    #母鸡三元一只,公鸡一元一只,小鸡0.5元一只,一百元全部买鸡,有多少种不同买法,分别是什么?count=0form_jinrange(1,100//3):forg_jinrange(1,100):forx_......
  • Python 环境安装教程(Window10系统)原文转载地址:https://cloud.tencent.com/developer/a
    Python环境安装教程(Window发布于2020-02-1022:40:45阅读 14.2K0 Python编程语言非常强大,非常容易上手,版本更新也不慢,在win10x64中兼容性也很好,直接安装不......
  • Python设置递归深度(python代码报错maximum recursion depth exceeded)
    现象:Python写了一个递归脚本,运行报错:pythonmaximumrecursiondepthexceeded原因:超过最大递归深度解决:手动设置递归深度importsyssys.setrecursionlimit(1000000......
  • python利用flux基本读写influxDB
    1、读取QuerApi形式python利用flux语句查询influxdb数据。https://influxdb-client.readthedocs.io/en/latest/api.html#queryapi代码frominfluxdb_clien......
  • re | [SUCTF2018]HelloPython
    re|[SUCTF2018]HelloPythonpyc逆向,解出来一坨翔:(lambda__operator,__print,__g,__contextlib,__y:[(lambda__mod:[[[(lambda__items,__after,__sentine......
  • 【Python】使用os模块设置工作路径和添加环境变量
    查看和设置工作路径importosprint(os.getcwd())#显示当前路径os.chdir('./example/path')#更改路径,''里面为更改的路径print(os.getcwd())#显示当前路径......