-
深浅拷贝
2017-06-23 15:38:07深浅拷贝一、数字和字符串
对于数字和字符串而言,赋值、浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址。import copy ########## 数字、字符串 ########### #n1 = 123 n1 = "i am a beautiful girl." print(id(n1)) ### 赋值 ### n2 = n1 print(id(n2)) ### 浅拷贝 ### n2 = copy.copy(n1) print(id(n2)) ### 深拷贝 ### n3 = copy.deepcopy(n1) print(id(n3))
二、其他基本数据类型
对于字典、元组、列表 而言,进行赋值、浅拷贝和深拷贝时,其内存地址的变化是不同的。
1、赋值
赋值,只是创建一个变量,该变量指向原来内存地址,如:n1 = {"k1": "zhang", "k2": 123, "k3": ["mary", 456]} n2 = n1
2、浅拷贝
浅拷贝,在内存中只额外创建第一层数据import copy n1 = {"k1": " zhang ", "k2": 123, "k3": ["mary ", 456]} n3 = copy.copy(n1)
3、深拷贝深拷贝,在内存中将所有的数据重新创建一份(排除最后一层,即:python内部对字符串和数字的优化)
import copy n1 = {"k1": " zhang ", "k2": 123, "k3": ["mary ", 456]} n4 = copy.deepcopy(n1)
应用:
浅拷贝import copy dic = { "cpu":[80,], "mem":[80,], "disk":[80,], } print("before dic",dic) new_dic = copy.copy(dic) new_dic["cpu"][0] = 50 print("new_dic dic",new_dic) print("after dic",dic)
运行结果:
before dic {'cpu': [80], 'mem': [80], 'disk': [80]} new_dic dic {***'cpu': [50]***, 'mem': [80], 'disk': [80]} after dic {'***cpu': [50]***, 'mem': [80], 'disk': [80]}
深拷贝
import copy dic = { "cpu":[80,], "mem":[80,], "disk":[80,], } print("before dic",dic) new_dic = copy.deepcopy(dic) new_dic["cpu"][0] = 50 print("new_dic dic",new_dic) print("after dic",dic)
输出结果:
before dic {‘cpu’: [80], ‘mem’: [80], ‘disk’: [80]}
new_dic dic {‘cpu’: [50], ‘mem’: [80], ‘disk’: [80]}
after dic {‘cpu’: [80], ‘mem’: [80], ‘disk’: [80]}
收藏数
5,593
精华内容
2,237
-
环状区间DP
-
JsIntegration.js
-
建立面向市场的移动通信网络质量考核体系
-
Spring Boot2.X仿朋友圈PC版系统实战_架构1.0
-
web前端:canvas像素化-马赛克mosaic案例,原生js实现图片马赛克复制、覆盖
-
python 函数与方法的区分与示例
-
[Windows] 【PC】京东2021炸年兽活动一键做任务 全民自动炸年兽1.21
-
【数据分析实战训练营】Hive详解
-
多线程与线程池技术详解(图书配套)
-
SecureCRT.rar
-
Selenium3分布式与虚拟化
-
RedHat7 替换yum源
-
手势解锁-canvas-javascript实战
-
Appium自动化测试套餐
-
异种铝合金激光诱导电弧拼焊接头塌陷研究
-
云效codeup使用
-
全志V3S挖坑填坑-环境配置(系列一)
-
iptables基础理解---巨详细!!!
-
执行 source /etc/profile命令时,报错:-bash: #: 未找到命令
-
【数据分析-随到随学】Hadoop数据分析