对于 数字 和 字符串 而言,赋值、浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址。

print(id(n2))

对于字典、元组、列表而言,进行赋值、浅拷贝和深拷贝时,其内存地址的变化是不同的。

赋值,只是创建一个变量,该变量指向原来内存地址,如:

>>> n1 = {"k1": "zhangshan", "k2": 123, "k3": ["lisi", 456]}

>>> n2 = n1

>>> print id(n1)

11195200

>>> print id(n2)

11195200

浅拷贝,在内存中只额外创建第一层数据

>>> n1 = {"k1": "zhangshan", "k2": 123, "k3": ["lisi", 456]}

>>> n3 = copy.copy(n1)

>>> print id(n1)

11267952

>>> print id(n3)

11151792

>>> print id(n1['k3'])  ##查看内存地址相同

139853825328696

>>> print id(n3['k3'])  ##查看内存地址相同

139853825328696

深拷贝,在内存中将所有的数据重新创建一份(排除最后一层,即:python内部对字符串和数字的优化)

>>> import copy

>>> n1 = {"k1": "zhangshan", "k2": 123, "k3": ["lisi", 456]}

>>> n4 = copy.deepcopy(n1)

>>> print id(n1)

11193264

>>> print id(n4)

11249664

>>> print id(n1['k3'])  ##查看内存地址不同

139853635849824

>>> print id(n2['k3'])  ##查看内存地址不同

139853635827256

深浅拷贝应用场景

监控场景:更改拷贝后的数据,而原来的数据保持不变!

脚本如下:

#!/usr/bin/env python

#coding: utf8

import copy

#目的是更改数据后,原来的数据不变,而拷贝后的数据会随时更新!

dic = {

"cpu":[80,],

"mem":[80,],

"disk":[80,]

}

print("before:",dic)

#new_dic = copy.copy(dic)     ##浅拷贝后的数据更新会把原来和新的字典内容的数据都更新!

new_dic = copy.deepcopy(dic)   ##深拷贝只更新拷贝后的数据,而原来的数据保留不变!

new_dic["cpu"][0] = 50

print(dic)

print(new_dic)

输出内容:

before: {'cpu': [80], 'mem': [80], 'disk': [80]}

{'cpu': [80], 'mem': [80], 'disk': [80]}

{'cpu': [50], 'mem': [80], 'disk': [80]}

python深浅拷贝应用_python之深浅拷贝相关推荐

  1. python深浅拷贝 面试_python基础-深浅拷贝

    深拷贝与浅拷贝 总结: # 浅拷贝:list dict: 嵌套的可变数据类型是同一个 # 深拷贝:list dict: 嵌套的不可变数据类型彼此独立 浅拷贝 # 个人理解: # 在内存中重新创建一个空 ...

  2. python 深浅拷贝案例_python(深浅拷贝)

    1.深拷贝  -->  克隆一份,修改拷贝后的内容不对原对象内容产生影响 拷贝后修改序列中元素内容,注意:被修改的元素不能为一个序列中的某个值 a  = [["北京多测师", ...

  3. python列表浅复制_Python列表深浅复制详解

    转自:https://www.cnblogs.com/blaomao/p/7239203.html 在文章<Python 数据类型>里边介绍了列表的用法,其中列表有个 copy() 方法, ...

  4. python怎么设置颜色深浅变化_python之深浅拷贝

    python中,对象的赋值,拷贝(深/浅拷贝)之间是有差异的,如果使用的时候不注意,就可能产生意外的结果,其实这个是由于共享内存导致的结果 拷贝:原则上就是把数据分离出来,赋值其数据,并以后修改互不影 ...

  5. python对象回收_python 引用,拷贝,对象回收,弱引用

    引用 python中,在对对象赋值,参数传递,函数返回等等, 都是引用传递的. 直接copy个例子来[1]: a = [1, 2, 3] b = a b.append(5) print a, b 输出 ...

  6. python字典拷贝_Python字典(dict)拷贝

    Python字典(dict)拷贝教程 在 字典直接赋值拷贝详解 语法 dic1 = dic 参数 参数 描述 dic 需要赋值字典. dic1 需要被赋值的字典. 说明 将整个字典 dic 赋值给字典 ...

  7. Python编程系列教程第16讲——拷贝自身到系统目录

    分享知识,分享快乐,收获友谊,收获财富! 大家好,我是数字雨,QQ:798033502 http://itbook.taobao.com/ 今天给大家带来的教程是<Python编程系列教程第16 ...

  8. Python 直接赋值、浅拷贝和深度拷贝区别

    b = a: 赋值引用,a 和 b 都指向同一个对象. b = a.copy(): 浅拷贝, a 和 b 是一个独立的对象,但他们的子对象还是指向同一对象(是引用) ''' 遇到问题没人解答?小编创建 ...

  9. Python 直接赋值、浅拷贝和深度拷贝解析

    转自菜鸟教程: https://www.runoob.com/w3cnote/python-understanding-dict-copy-shallow-or-deep.html 直接赋值:其实就是 ...

最新文章

  1. “外部质量”还是“内部质量”
  2. python flask解决上传下载的问题
  3. AMD、CMD、CommonJS、ES6(import/export)
  4. Maven 进行多环境配置,使用profile文件进行配置
  5. virtualbox+vagrant安装虚拟机
  6. SQL Server2005的连接和配置(入门)
  7. PHP面试常考内容之面向对象(3)
  8. android 音乐app 进度条_让这些可爱的APP成为你的生活好帮手
  9. linux socket高性能服务器处理框架
  10. 【模板】线段树区间修改
  11. win7设置html,Windows7怎么设置默认浏览器?
  12. Python实战从入门到精通第二十一讲——构建一个模块的层级包
  13. 低代码开发平台_如何挑选最适合你的低代码开发平台
  14. MATLAB模拟导热过程,一维热传导MATLAB模拟.doc
  15. Python自省 type(),dir(),getattr(),hasattr(),isinstance().
  16. bzoj1047-理想的正方形(二维单调队列)
  17. jsp el表达式无法正常显示解决方法
  18. 计算机虚拟仿真专业,计算机虚拟仿真实验教学中心
  19. 学生也可以搭建自己的网站详细讲解
  20. C语言基础——C语言概述——语句和每行代码的含义

热门文章

  1. 用机器学习识别不断变化的股市状况—隐马尔可夫模型(HMM)股票指数预测实战
  2. 【js/css】pushState和popState简明教程
  3. 1032 挖掘机技术哪家强(JAVA)
  4. 建筑施工队力荐的华中起重室内施工电梯,到底有多好?
  5. MultiTrigger
  6. 软件测试方法策略总结
  7. 基于MRAM和NVMe的未来云存储解决方案
  8. AttributeError: ‘ChatGLMConfig‘ object has no attribute ‘quantization_bit‘解决方案
  9. Python异常:AttributeError: module ‘xxxx‘ has no attribute ‘open‘ 解决办法
  10. 中国光纤将打造全球顶级T4级分布式云计算数据中心