首页 > 其他分享 >深浅copy

深浅copy

时间:2023-01-16 18:33:27浏览次数:37  
标签:alex name d2 age 深浅 scores copy data

现有数据

data = {
    "name":"alex",
    "age":18,
    "scores":{
        "语文":130,
        "数学":60,
        "英语":98,
    }
}
d2 = data
data["age"] = 20 
print(d2) 

 你说d2打印的值里,age是18,还是20?

{'name': 'alex', 'age': 20, 'scores': {'语文': 130, '数学': 60, '英语': 98}}

 

为何是20呢? 因为d2=data相当于只是拿到了data的内存地址,但data里的每个k,v都是有单独的内存的地址的。d2,data会一直共享这个dict里的数据,不会出现像之前字符串a=1,b=a, a=2, b依然等于1的情况。

如果我确实想复制一份完整的dict数据怎么办呢?

可以用浅copy语法

data = {
    "name":"alex",
    "age":18,
    "scores":{
        "语文":130,
        "数学":60,
        "英语":98,
    }
}
d2 = data.copy()
data["age"] = 20
print(d2)
print(data)

 

输出

{'name': 'alex', 'age': 18, 'scores': {'语文': 130, '数学': 60, '英语': 98}}
{'name': 'alex', 'age': 20, 'scores': {'语文': 130, '数学': 60, '英语': 98}}

 

这样就相当于是2份独立数据了, 但是为什么这个语法叫做浅copy呢? 你改一下score里的值就知道了。

data = {
    "name":"alex",
    "age":18,
    "scores":{
        "语文":130,
        "数学":60,
        "英语":98,
    }
}
d2 = data.copy()
data["age"] = 20
data["scores"]["数学"] = 77  
print(d2)
print(data)

 

看输出 , 很神奇,两个Dict里age的值是独立的,但score字典里的分数值貌似是共享的

{'name': 'alex', 'age': 18, 'scores': {'语文': 130, '数学': 77, '英语': 98}}
{'name': 'alex', 'age': 20, 'scores': {'语文': 130, '数学': 77, '英语': 98}}

因为浅copy会仅复制dict的第一层数据,更深层的scores下面的值依然是共享一份。

 

注意图中的2个dict中的name都是alex,内存地址也一样,在没改前,两个name都确实指向同一个内存地址,但只要改任何一个的值,内存地址都会变更, 如age这个key一样。

深copy

若你想彻底使上面的2个dict完全独立,无论有多少层数据。那就要用python工具包里的一个工具了,

 

 

 最后,这东西有什么用呢? 坦白讲,以后开发中多数情况下你用不到,但是你有要知道有这个知识点,说不定哪天有个需求就要求你必须确保你的2个复制出来的dict,list必须是独立的了。

标签:alex,name,d2,age,深浅,scores,copy,data
From: https://www.cnblogs.com/yuleicoder/p/12668362.html

相关文章

  • BeanUtils.copyProperties 性能慢
    暂时不看原因,使用MapStruct解决使用流程:1.idea安装MapStructSupport插件(未测试是否为必要条件,推测不必要)2.引入jar包<!--mapstruct核心--><dependency>......
  • 如何用USB Copy功能自动拷贝移动设备内照片
    在套件中心找到USBCopy并安装​在NAS上插入一个空U盘,打开主菜单——USBCopy​选择照片/视频导入​设置任务名称、来源、目的地,其他三个选项按需勾选——应用​应用后任务......
  • 避免用Apache Beanutils进行属性的copy。why?让我们一起一探究竟
    在实际的项目开发中,对象间赋值普遍存在,随着双十一、秒杀等电商过程愈加复杂,数据量也在不断攀升,效率问题,浮出水面。问:如果是你来写对象间赋值的代码,你会怎么做?答:想都不用想,直......
  • 避免用Apache Beanutils进行属性的copy。why?让我们一起一探究竟
    在实际的项目开发中,对象间赋值普遍存在,随着双十一、秒杀等电商过程愈加复杂,数据量也在不断攀升,效率问题,浮出水面。问:如果是你来写对象间赋值的代码,你会怎么做?答:想都不用......
  • Go 标准库之 io.Copy 和 ioutil.ReadAll
    1.go标准库之io.Copy和ioutil.ReadAll1.1介绍go标准库中通过ioutil.ReadAll实现数据流的读取,io.Copy实现数据流的读取和写入。那两者有什么区别呢?有。iouti......
  • 配置ssh等效连接(ssh-copy-id)
    环境:OS:Centos7机器A:192.168.1.100机器B:192.168.1.102机器C:192.168.1.103目的:配置以上3台机器免密等效连接1.机器A:192.168.1.100上操作su-postgresssh-keygen-t......
  • Python深浅拷贝的理解
    1.拷贝拷贝实际上其实就是在赋值,比如我们有一个列表L1,定义另一个列表L2引用列表L1,实际上就是在拷贝列表L1的值,由于由于L1列表是可变的数据类型,所以当L1的值变的时候,L2的值......
  • Copy a Conda env to another machine
    ThefollowingsulutionsarefromchatGPTandhasbeenverified.1.TocopyaCondaenvironmentfromoneLinuxmachinetoanother,youcanusethecondaenvexp......
  • 【命令行copy命令】将php与jpg图片合并
    合成jpgD:\file\合成>copy/bhan1.jpg+bad.phphan4.jpg合成ExcelD:\file\合成>copy/bSys_Dept_合成.xls+bad.phpDept1.xls copy命令 ......
  • Zero-Copy
    "Zero-copy"describescomputeroperationsinwhichtheCPUdoesnotperformthetaskofcopyingdatafromonememoryareatoanotherorinwhichunnecessaryda......