当前位置: 首页 > news >正文

Python全栈之路系列之深浅拷贝

深浅拷贝

深浅拷贝分为两部分,一部分是数字和字符串,另一部分是列表、元组、字典等其他数据类型。

数字和字符串

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

# 导入copy模块
>>> import copy
# 定义一个变量var1 >>> var1 = 123 # 输出var1的内存地址 >>> id(var1) 1347747440 >>> var2 = var1 # var2的内存地址和var1相同 >>> id(var2) 1347747440 # 浅拷贝 >>> var3 = copy.copy(var1) # var3的内存地址和var1相同 >>> id(var3) 1347747440 # 深拷贝 >>> var4 = copy.deepcopy(var1) # var4的内存地址和var1相同 >>> id(var4) 1347747440 

其他数据类型

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

创建一个字典var1

var1 = {"k1": "1", "k2": 2, "k3": ["abc", 456]} 

赋值

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

>>> var1 = {"k1": "1", "k2": 2, "k3": ["abc", 456]} >>> var2 = var1 >>> id(var1) 1937003361288 >>> id(var2) 1937003361288 

如图所示:

Python-Day04-01

浅拷贝

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

# 导入拷贝模块
>>> import copy
>>> var1 = {"k1": "1", "k2": 2, "k3": ["abc", 456]} # 使用浅拷贝的方式 >>> var2 = copy.copy(var1) # 两个变量的内存地址是不一样的 >>> id(var1) 2084726354952 >>> id(var2) 2084730248008 # 但是他们的元素内存地址是一样的 >>> id(var1["k1"]) 2084726207464 >>> id(var2["k1"]) 2084726207464 

如图所示:

Python-Day04-02

深拷贝

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

# 导入拷贝模块
>>> import copy
>>> var1 = {"k1": "1", "k2": 2, "k3": ["abc", 456]} # 使用深拷贝的方式把var1的内容拷贝给var2 >>> var2 = copy.deepcopy(var1) # var1和var2的内存地址是不相同的 >>> id(var1) 1706383946760 >>> id(var2) 1706389852744 # var1和var2的元素"k3"内存地址是不相同的 >>> id(var1["k3"]) 1706389853576 >>> id(var2["k3"]) 1706389740744 # var1和var2的"k3"元素的内存地址是相同的 >>> id(var1["k3"][1]) 1706383265744 >>> id(var2["k3"][1]) 1706383265744 

如图所示:

Python-Day04-03

转载于:https://www.cnblogs.com/ethereala/p/8688429.html

相关文章:

  • mysql之count,max,min,sum,avg,celing,floor
  • 课堂小练习
  • 【题解】 [POI2012]FES-Festival (差分约束)
  • mac环境下配置nginx
  • 迭代器(Iterator)
  • git设置HTTP代理
  • Box and Ball
  • jsp中的el表达式没有解析
  • android解决AVD中文路径无法启动问题
  • TP5 中引入第三方类库
  • [BZOJ5250][九省联考2018]秘密袭击(DP)
  • 数据结构中的查找
  • maven之pom.xml
  • tomcat的安装以及环境配置
  • Vue入门干货,以及遇到的坑
  • 【node学习】协程
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • JavaScript中的对象个人分享
  • js中的正则表达式入门
  • orm2 中文文档 3.1 模型属性
  • PHP 程序员也能做的 Java 开发 30分钟使用 netty 轻松打造一个高性能 websocket 服务...
  • PHP那些事儿
  • python_bomb----数据类型总结
  • Sass Day-01
  • Vue ES6 Jade Scss Webpack Gulp
  • vue-loader 源码解析系列之 selector
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • Vultr 教程目录
  • webpack入门学习手记(二)
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 前嗅ForeSpider教程:创建模板
  • 微信小程序开发问题汇总
  • 一起参Ember.js讨论、问答社区。
  • 再谈express与koa的对比
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • Java数据解析之JSON
  • Python 之网络式编程
  • (3)nginx 配置(nginx.conf)
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (数据结构)顺序表的定义
  • (一)认识微服务
  • (转)Android学习笔记 --- android任务栈和启动模式
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • ..回顾17,展望18
  • .java 9 找不到符号_java找不到符号
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)
  • .net 验证控件和javaScript的冲突问题
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • .net开源工作流引擎ccflow表单数据返回值Pop分组模式和表格模式对比
  • @PreAuthorize注解
  • [ C++ ] STL priority_queue(优先级队列)使用及其底层模拟实现,容器适配器,deque(双端队列)原理了解
  • []新浪博客如何插入代码(其他博客应该也可以)