python学习笔记:深浅拷贝的使用和原理


import copy
a = "i love python"
b = a
a1 = copy.copy(a)
a2 = copy.deepcopy(b)
print(id(a))
print(id(b))
print(id(a1))
print(id(a2))
#输出:
2114011486192
2114011486192
2114011486192
2114011486192

#赋值
D = {'k1':'v1','k2':123,'k3':["str1",469]}
D2 = D
print(id(D))
print(id(D2))
#输出:
2178677065032
2178677065032

例2,浅拷贝,
#浅拷贝
D = {'k1':'v1','k2':123,'k3':["str1",469]}
D2 = copy.copy(D) #浅拷贝,额外创建第一层(变量名id改变,对象id不变,还是引用旧对象)
print(id(D))
print(id(D2))
print(id(D["k1"]))
print(id(D2["k1"]))
#输出;
1993456403784
1993456836488
1993456800856
1993456800856

D = {'k1':'v1','k2':123,'k3':["str1",469]}
D2 = copy.deepcopy(D)
print(id(D))
print(id(D2))
print(id(D["k3"]))
print(id(D2["k3"]))
print(id(D["k3"][0]))
print(id(D2["k3"][0]))
#输出:
2129861461320
2129861875016
2129863354440
2129863327624
2129861860856
2129861860856

#浅拷贝,改变新字典,久字典也一起改变
dict = {"cpu":[100],"mem":[200],"disk":[300]}
new_dict = copy.copy(dict)
new_dict["cpu"][0] = 90
print(new_dict)
print(dict)
#输出:
{'cpu': [90], 'mem': [200], 'disk': [300]}
{'cpu': [90], 'mem': [200], 'disk': [300]}
#深拷贝,改变新字典,久字典没变
dict = {"cpu":[100],"mem":[200],"disk":[300]}
new_dict = copy.deepcopy(dict)
new_dict["cpu"][0] = 90
print(new_dict)
print(dict)
#输出:
{'cpu': [90], 'mem': [200], 'disk': [300]}
{'cpu': [100], 'mem': [200], 'disk': [300]}
参考:
http://www.cnblogs.com/repo/p/5425774.html
http://blog.csdn.net/jerry_1126/article/details/41852591
python学习笔记:深浅拷贝的使用和原理的更多相关文章
- Python学习(006)-深浅拷贝及集合
深浅拷贝 import copy husband=['xiaoxin',123,[200000,100000]] wife=husband.copy() #浅拷贝 wife[0]='xiaohong ...
- python学习之深浅拷贝
4.2 深浅拷贝 4.2.1 认识 首先应该知道python中变量在内存中是怎么存放的! 在python中,变量与变量的值占用不同的内存.变量占用的内存,并非直接存储数值,而存储的是值在内存中的地址. ...
- Python学习 :深浅拷贝
深浅拷贝 一.浅拷贝 只拷贝第一层数据(不可变的数据类型),并创建新的内存空间进行储蓄,例如:字符串.整型.布尔 除了字符串以及整型,复杂的数据类型都使用一个共享的内存空间,例如:列表 列表使用的是同 ...
- Python学习-列表深浅拷贝
一.先看一个简单的赋值语句 lst1 = ['France', 'Belgium', 'England'] lst2 = lst1 # lst1.append('Uruguay') lst2.appe ...
- python基础学习笔记——深浅拷贝
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 lst1 = ["⾦⽑狮王", "紫衫⻰王&qu ...
- day8 python学习 集合 深浅拷贝
1.内存地址: 字符串在20位以内,没有空格,没有特殊字符的情况下,同样的字符串内存地址是一样的 2.元组中:在只有一个值的时在后边加逗号和没有逗号的区别 t1=(1) 不加逗号这个值是什么类型就打印 ...
- python学习笔记3---浅拷贝和深拷贝,file操作
import copy a=[1,2,3,['a','b']] b=a c= copy.copy(a)---浅拷贝 d=copy.deepcopy(a)---深拷贝 file操作: python 文件 ...
- python学习day7 深浅拷贝&文件操作
4-4 day07 深浅拷贝&文件操作 .get()用法 返回指定键的值,如果值不在字典中返回默认值. info={'k1':'v1,'K2':'v2'}mes = info.get('k1' ...
- python学习笔记:*args和**kwargs使用原理?
一.*args和**kwargs原理 先看个例子: def test(*args,**kwargs): print("args =",args) print("kwarg ...
- Python学习笔记基础篇——总览
Python初识与简介[开篇] Python学习笔记——基础篇[第一周]——变量与赋值.用户交互.条件判断.循环控制.数据类型.文本操作 Python学习笔记——基础篇[第二周]——解释器.字符串.列 ...
随机推荐
- [ICPC 北京 2017 J题]HihoCoder 1636 Pangu and Stones
#1636 : Pangu and Stones 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 In Chinese mythology, Pangu is the fi ...
- Nest.js 管道
Docs: https://docs.nestjs.com/pipes 管道将输入数据转换为所需的输出.此外,它可以处理验证,当数据不正确时可能会抛出异常. 内置的 pipe import { Arg ...
- maven deploy 上传jar包到私有仓库
mvn \ deploy:deploy-file \ -DgroupId=com.weibo.datasys \ -DartifactId=data-flow \ -Dversion=2.0.0 \ ...
- javascript的数组之from()
Array.from()方法从一个类似数组或可迭代对象中创建一个新的数组实例. const arr = [1, 2, 3]; Array.from(arr); //[1, 2, 3] Array.fr ...
- 关于ie浏览器信任站点的代码
1检测用户当前浏览器是否将域名的ip添加信任站点 js代码 //域名ip的获取 var hostname = window.location.hostname; var WshShell ...
- WebDriver API--元素定位
WebDriver属于Selenium体系中设计出来操作浏览器的一套API, 站在WebDriver的角度, 因为它针对多种编程语言都实现了一遍这套API,所以它可以支持多种编程语言: 站在编程语言的 ...
- VoiceXML标识元素及其属性
VoiceXML 元素 <assign> 给变量赋值. <audio> 播放语音文件. <block> 无用户交互的可执行代码块. <catch> 捕获 ...
- Cartographer源码阅读(6):LocalTrajectoryBuilder和PoseExtrapolator
LocalTrajectoryBuilder意思是局部轨迹的构建,下面的类图中方法的参数没有画进去. 注意其中的三个类:PoseExtrapolator类,RealTimeCorrelativeSca ...
- 公众号获取unionid
然后在微信客户端输入unionid接口的地址(比如发给文件传输助手www.XXX.COM/unionid.php),随便给别人发过去,在点击该链接,就能看到打印的accessToken,openid, ...
- ubuntu12下subversion 1.6升级为1.8版本
应用场景是.android源码体积太大.我从服务器上svn co过来,速度很慢.服务器是ubuntu14版本,我工作的机器是ubuntu12版本,14上面svn版本是1.8.8,12上svn的版本是1 ...