首页 > 编程语言 >python 浅拷贝和深拷贝,赋值的例子

python 浅拷贝和深拷贝,赋值的例子

时间:2023-04-05 14:23:04浏览次数:44  
标签:13 python alist 列表 blist 拷贝 id 赋值

一、浅拷贝copy.copy()

数据半独立,看下面例子

1、一层列表,能够完全拷贝,和深拷贝一样的效果

import copy
alist=[1,2,3] #id;2281268077504 blist=copy.copy(alist) # id: 2281267497216 alist.append(13) # 一层列表添加值后,alist的值:[1, 2, 3, 13]
# blist的值不变:[1, 2, 3]

2、嵌套列表,浅拷贝就只拷贝了外层数据,深层数据的内存id依旧是同一个

alist=[1,2,3,[8,9]]    #id(alist):1989637956864     id((alist[-1]) :1709628674816
blist=copy.copy(alist) # id(blist): 1989637933056  id((blist[-1])) :1709628674816  跟上面一样
 alist[-1].append(13) 

#给嵌套列表添加值后,alist的值:[1, 2, 3, [8, 9, 13]]
#blist的子列表中值也跟着变化 :[1, 2, 3, [8, 9, 13]]

二、深拷贝copy.deepcopy()

数据完全独立,外层和深层数据的内存id均不一致

1、一层列表,同浅拷贝,略

2、嵌套列表,深拷贝不只拷贝外层,深层数据也拷贝,id也不一致

alist=[1,2,3,[8,9]]    #id;1989637956864   id((alist[-1]) :1709628674816
blist=copy.copy(alist) # id: 1989637933056  id((blist[-1])):1746552654016   跟上面不一样
alist[-1].append(13)

#给嵌套列表添加值后,alist的值:[1, 2, 3, [8, 9, 13]]
#blist的子列表中值不会变化 :[1, 2, 3, [8, 9]]

三、赋值

外层和深层的内存id都一致

1、修改外层列表

alist=[1,2,3,[8,9]]    #id;3005312197888   子列表id:3005306530480
blist=alist            #id;3005312197888   子列表id:3005306530480
alist.append(13)  
#alist的值:[1, 2, 3, [8, 9], 13]
#blist的值:[1, 2, 3, [8, 9], 13]

2、修改子列表,内存id依旧完全一样

alist=[1,2,3,[8,9]]    #id;1729717527808   子列表id:1729718080384
blist=alist            #id;1729717527808   子列表id:1729718080384
alist[-1].append(13)  
#alist的值:[1, 2, 3, [8, 9, 13]]
#blist的值:[1, 2, 3, [8, 9, 13]]

 

标签:13,python,alist,列表,blist,拷贝,id,赋值
From: https://www.cnblogs.com/docstrange/p/17284560.html

相关文章

  • 自学Python爬虫笔记(day2)
    环境python3.9版本及以上,开发工具pycharm 浏览器工具推荐使用Chrome,其他浏览器均有一定程度的阉割。主要是熟练使用后端界面进行爬取数据。 http协议:超文本传输协议把一条消息分为三大块内容:请求:1.请求行-->请求方式(get/post)请求URL地址协议2.请求头-......
  • python中isinstance()用法
    isinstance()用来判断一个对象是否是一个已知的类型,isinstance()函数的语法如下:isinstance(object,classtype)object--实例对象。classtype --可以是直接或间接类名、基本类型或者由它们组成的元组。isinstance()函数的返回值是布尔型,若object的类型是classtype,那么就......
  • Win10(CPU)+ Anaconda3 + python3.9安装pytorch
    Win10(CPU)+Anaconda3+python3.9安装pytorch1.安装Anaconda31.1下载Anaconda3可以在官网下载Anaconda3-2022.05-Windows-x86_64.exe,这个版本对应的是python3.9。1.2安装Anaconda3此步骤比较简单,双击.exe文件,一步一步执行即可,有不确定的可以自行百度,教程比较多,但基本一致......
  • 关于python中使用json.load()从json文件中读取数据转换成字典
    在json模块中,我们可以经常会用到load()与loads(),其中两者的区别如下json.load()从json文件中读取数据转抱为dict类型json.loads()将str类型的数据转换为dict类型这里笔者主要说明json.load()的用法,举例说明,如下有一json文件,ip-ranges.json,内容如下:这里我们将使用json.load(......
  • Jenkins部署python-flask后端项目,持续集成(jinkins配置python虚拟环境)
    第一步:新建项目Jenkins->新建任务->起名字,构建一个自由风格的软件项目->保存第二步,添加git仓库第三步,构建,添加shell(Windows系统选择ExecuteWindowsbatchcommand)以windows为例感谢大佬的分享:https://www.cnblogs.com/andy0816/p/16617675.html......
  • Python爬虫 execjs执行js报错json.decoder.JSONDecodeError: Expecting value: line 1
    fun=re.search(r'(__=\([\S\s]*?;)<',r_text).group(1)fun=fun+'functionget(){returnJSON.stringify(__.data)}'ctx=execjs.compile(fun)rdata=(ctx.eval('get()'))报错json.decoder.JSONDecodeError:Expectingvalue:line1col......
  • 续:python 新环境的创建并在 spyder 中转换 - 如何解决转换环境时报错:invalid file pat
    原文地址blog.csdn.net目录重点问题描述解决方法各种尝试最终灵感重点不想看全文的直接看这里,不要安装一个和已有python环境一样版本的python(这里的一样指的是完全一样,比如都是python2.7.15),如果已有python2.7.15,可以创建python2.7.18的环境并在spyder中转换。如......
  • python 新环境的创建并在 spyder 中转换——在 spyder 中配置 arcgis 的 python 解释
    原文地址blog.csdn.net目录问题描述创建python新环境查看所有环境创建新的python2.7虚拟环境激活环境删除环境在spyder中配置环境,切换python解释器回归正题,将指定路径下的python解释器配置到spyder中重点——解决方法问题描述这几天上课需要下载和学习a......
  • Python装饰器与GIL锁解释
    Python进阶篇-系列文章全篇......
  • python机器学习案例系列教程——K最近邻算法(KNN)、kd树
    全栈工程师开发手册(作者:栾鹏)python数据挖掘系列教程K最近邻简介K最近邻属于一种估值或分类算法,他的解释很容易。我们假设一个人的优秀成为设定为1、2、3、4、5、6、7、8、9、10数值表示,其中10表示最优秀,1表示最不优秀。我们都知道近朱者赤,近墨者黑,我们想看一个人是什么样的,看......